黑马程序员技术交流社区
标题:
请谈下对枚举的理解
[打印本页]
作者:
王敏NO.09
时间:
2012-4-26 09:08
标题:
请谈下对枚举的理解
枚举的视频看完了,老师讲的似乎也挺懂了,但是感觉还是理解的不深入,感觉还是很抽象,什么时候使用更是感觉很迷茫?
请大家谈谈对枚举的理解,指点迷津,谢谢
作者:
徐鑫
时间:
2012-4-26 09:37
1.枚举类型是一种取值被严格限定在一个有限的集合中的变量类型。
2.java中的枚举是一种特殊的类。每一个枚举都会被编译成一个class文件。
3.枚举主要用于限定变量的取值,从而从根源上有效的避免了非法的赋值。
4.声明一个枚举:
public enum Sex{
MALE,FEMALE
}
作者:
刘永菲
时间:
2012-4-26 09:42
枚举的本质是类,在没有枚举之前,仍然可以按照java最基本的编程手段来解决需要用到枚举的地方。枚举屏蔽了枚举值的类型信息,不像在用public static final定义变量必须指定类型。枚举是用来构建常量数据结构的模板,这个模板可扩展。枚举的使用增强了程序的健壮性,比如在引用一个不存在的枚举值的时候,编译器会报错。
作者:
金超
时间:
2012-4-26 10:15
用最简单的话讲就是
枚举类型是一种取值被严格限定在一个有限的集合中的变量类型, java中的枚举是一种特殊的类。每一个枚举都会被编译成一个class文件。 枚举主要用于限定变量的取值,从而从根源上有效的避免了非法的值。
声明一个枚举:
public enum Sex{
MALE,FEMALE
}
可以声明在一个类的内部,也可以声明在一个单独的文件里。
若声明在一个类的内部,则会被编译为 :
类名$Sex.class。
证明这时enum是以内部类的形式存在。
相信很多人不明白MALE,FEMALE到底是什么类型。请看这句代码:
Sex sex = Sex.MALE;
只有相同类型才可以赋值。枚举是一种特殊的类,那么sex就是一个类的引用,那么MALE必定也是一个类的引用。以下代码进一步证明了这一点。
Sex.FEMALE.name();
因为只有类才可以调用方法。
所以在声明一个enum的时候只需要指定引用变量的名字,系统就会自动创建对象,并把地址返回给你定义的引用变量。
作者:
liqian
时间:
2012-4-26 10:16
枚举的常见用法:
1.常量 把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
2.switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,可以case枚举定义的常量,能让我们的代码可读性更强。
3.向枚举中添加新方法 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
4.实现接口 所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
5.枚举集合的使用 java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。
枚举用法的详细解释请看博客 http://softbeta.iteye.com/blog/1185573
作者:
毕博
时间:
2012-4-26 10:20
定义枚举类型其实就是在定义一个类,只不过很多细节由编译器帮你补齐了,所以,某种程度上enum关键词的作用就像是class或interface.
当使用enum定义枚举类型时,实际上所定义出来的类型是继承自java.lang.Enum类。而每个被枚举的成员其实就是定义的枚举类型的一个实例, 它们都被默认为final。无法改变常数名称所设定的值,它们也是public和static的成员,这与接口中的常量限制相同。可以通过类名称直接使用 它们。
所定义的枚举类型Action,TURN_LEFT,TURN_RIGHT,SHOOT都是Action的一个对象实例。因为是对象,所以,对象上 自然有一些方法可以调用。如从Object继承焉的toString()方法被重新定义了,可以让你直接取得枚举值的字符串描述
作者:
光sail
时间:
2012-4-26 11:00
枚举(Enum):我们所定义的每个枚举类型都继承自java.lang.Enum 类,枚举中的每个成员默认都是public static final 的。
而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance)。换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确定下来了。
作者:
孙天
时间:
2012-4-26 12:02
在某些情况下,一个类的对象是有限而固定的,这种类被称为枚举类。枚举类终究不是普通的类,区别是:
1,枚举类可以实现多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是Object类
2,枚举类的构造器只能使用private访问控制符
3,枚举类的所有实力必须在枚举类中显式列出
4,所有枚举类提供了values方法
5,枚举类定义抽象方法时无需显式使用abstract关键字将枚举类定义为抽象类,但因为枚举类需要显式创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则编译错误
作者:
孙天
时间:
2012-4-27 10:21
孙天 发表于 2012-4-26 12:02
在某些情况下,一个类的对象是有限而固定的,这种类被称为枚举类。枚举类终究不是普通的类,区别是:
1,枚 ...
抄一遍还是记不住啊,一面试就全忘光了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2