黑马程序员技术交流社区
标题:
对于枚举的理解
[打印本页]
作者:
唐永康
时间:
2012-11-17 23:07
标题:
对于枚举的理解
对于枚举的理解,枚举相当于一个类,而枚举里面的大写常量就相当于一个枚举类的对象,不知道这样理解对不对,总感觉这样理解有些别扭,谁能更深入的理解,求教。
作者:
奚华
时间:
2012-11-18 00:00
首先,我举个例子,做个试验来共同探讨。看下面的代码:
1、我先定义一个枚举Size
enum Size
{
A,B,C
}
复制代码
将这段代码保存为Size.java文件
2、接着编译这段代码
javac Size.java
复制代码
生成Size.class文件
3、接着使用java反编译工具jad.exe文件反编译Size.class文件,生成Size.jad文件
4、用记事本打开Size.jad文件,以下是Size.jad文件的内容:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: Enum.java
final class Size extends Enum//发现Size居然继承了Enum类,并且修饰符是final
{
public static Size[] values()//Size居然有方法
{
return (Size[])$VALUES.clone();
}
public static Size valueOf(String s)//查阅API可知该方法覆盖了Enum类的方法
{
return (Size)Enum.valueOf(Size, s);
}
private Size(String s, int i)//Size居然有构造函数,调用了超类构造函数
{
super(s, i);
}
public static final Size A;//原来里面的枚举变量也属于Size类型,怪不得可以使用Size s = Size.A;
public static final Size B;
public static final Size C;
private static final Size $VALUES[];//也生成了这个东西
static //在static初始化块中给枚举变量赋值,调用了构造方法
{
A = new Size("A", 0);
B = new Size("B", 1);
C = new Size("C", 2);
$VALUES = (new Size[] {
A, B, C
});
}
}
复制代码
5、从以上例子我们可以看出,java实际上底层使用了类来实现枚举
6、以下是《java核心技术》中的讲解
A、所有的枚举类型都是java.lang.Enum类的子类
B、比较两个枚举类型值时不需要用equals(),用"=="就可以了
C、在JDK5中可以像下面这样使用枚举
enum Size{
SMALL("S"),MEDIUM("M"),LARGE("L");
Size(String str)//
{
this.str=str;
}
private String str;
}
复制代码
7、根据以上回答,我很想知道jdk7以前的switch语句能不能判断一个内部值是String的枚举变量?求验证?
作者:
奚华
时间:
2012-11-18 00:03
java反编译工具jad.exe可以到百度中搜索后下载!
作者:
奚华
时间:
2012-11-19 20:14
java里面万物都是对象,把枚举理解为对象更加统一了,一致了!!
作者:
张超
时间:
2012-11-19 23:23
奚华 发表于 2012-11-18 00:00
首先,我举个例子,做个试验来共同探讨。看下面的代码:
1、我先定义一个枚举Size将这段代码保存为Size.jav ...
厉害
作者:
李刚
时间:
2012-11-20 17:18
为什么要有枚举
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个(比如一周有七天可以定义星期类),否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,
作者:
唐永康
时间:
2012-11-25 18:07
奚华 发表于 2012-11-18 00:00
首先,我举个例子,做个试验来共同探讨。看下面的代码:
1、我先定义一个枚举Size将这段代码保存为Size.jav ...
很好,不错,能理解。很好,不错,能理解。很好,不错,能理解。很好,不错,能理解。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2