A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王敏NO.09 中级黑马   /  2012-4-26 09:08  /  2581 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

枚举的视频看完了,老师讲的似乎也挺懂了,但是感觉还是理解的不深入,感觉还是很抽象,什么时候使用更是感觉很迷茫?
请大家谈谈对枚举的理解,指点迷津,谢谢

8 个回复

倒序浏览
1.枚举类型是一种取值被严格限定在一个有限的集合中的变量类型。
2.java中的枚举是一种特殊的类。每一个枚举都会被编译成一个class文件。
3.枚举主要用于限定变量的取值,从而从根源上有效的避免了非法的赋值。
4.声明一个枚举:
public enum Sex{
MALE,FEMALE
}

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
枚举的本质是类,在没有枚举之前,仍然可以按照java最基本的编程手段来解决需要用到枚举的地方。枚举屏蔽了枚举值的类型信息,不像在用public static final定义变量必须指定类型。枚举是用来构建常量数据结构的模板,这个模板可扩展。枚举的使用增强了程序的健壮性,比如在引用一个不存在的枚举值的时候,编译器会报错。
回复 使用道具 举报
用最简单的话讲就是
枚举类型是一种取值被严格限定在一个有限的集合中的变量类型, java中的枚举是一种特殊的类。每一个枚举都会被编译成一个class文件。 枚举主要用于限定变量的取值,从而从根源上有效的避免了非法的值。
  声明一个枚举:
public enum Sex{
MALE,FEMALE
}
可以声明在一个类的内部,也可以声明在一个单独的文件里。
若声明在一个类的内部,则会被编译为 :
类名$Sex.class。
证明这时enum是以内部类的形式存在。
相信很多人不明白MALE,FEMALE到底是什么类型。请看这句代码:
Sex sex = Sex.MALE;
只有相同类型才可以赋值。枚举是一种特殊的类,那么sex就是一个类的引用,那么MALE必定也是一个类的引用。以下代码进一步证明了这一点。
Sex.FEMALE.name();
因为只有类才可以调用方法。
所以在声明一个enum的时候只需要指定引用变量的名字,系统就会自动创建对象,并把地址返回给你定义的引用变量。
回复 使用道具 举报
枚举的常见用法:
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

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
定义枚举类型其实就是在定义一个类,只不过很多细节由编译器帮你补齐了,所以,某种程度上enum关键词的作用就像是class或interface.

   当使用enum定义枚举类型时,实际上所定义出来的类型是继承自java.lang.Enum类。而每个被枚举的成员其实就是定义的枚举类型的一个实例, 它们都被默认为final。无法改变常数名称所设定的值,它们也是public和static的成员,这与接口中的常量限制相同。可以通过类名称直接使用 它们。

   所定义的枚举类型Action,TURN_LEFT,TURN_RIGHT,SHOOT都是Action的一个对象实例。因为是对象,所以,对象上 自然有一些方法可以调用。如从Object继承焉的toString()方法被重新定义了,可以让你直接取得枚举值的字符串描述

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
枚举(Enum):我们所定义的每个枚举类型都继承自java.lang.Enum 类,枚举中的每个成员默认都是public static final 的。
而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance)。换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确定下来了。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
孙天 黑马帝 2012-4-26 12:02:46
8#
在某些情况下,一个类的对象是有限而固定的,这种类被称为枚举类。枚举类终究不是普通的类,区别是:
1,枚举类可以实现多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是Object类
2,枚举类的构造器只能使用private访问控制符
3,枚举类的所有实力必须在枚举类中显式列出
4,所有枚举类提供了values方法
5,枚举类定义抽象方法时无需显式使用abstract关键字将枚举类定义为抽象类,但因为枚举类需要显式创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则编译错误
回复 使用道具 举报
孙天 黑马帝 2012-4-27 10:21:02
9#
孙天 发表于 2012-4-26 12:02
在某些情况下,一个类的对象是有限而固定的,这种类被称为枚举类。枚举类终究不是普通的类,区别是:
1,枚 ...

抄一遍还是记不住啊,一面试就全忘光了

点评

重要的是理解,编程切记死记硬背哦!  发表于 2012-4-28 22:58
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马