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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄云南 中级黑马   /  2012-3-21 21:55  /  2665 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题,枚举和普通类有哪些区别,相对于普通类定义枚举有什么好处。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

5 个回复

倒序浏览
以下是一哥们说的:
在某些情况下,一个类的对象是有限而且固定的,例如只有四个对象的季节类,只有九个对象的行星类,这种实例有限且固定的类,在JAVA里面,我们称其为枚举类。
当我们需要手动实现枚举类时,可以采用以下的设计方式:
通过private将构造器隐藏起来。
把这个类的所有可能实现的实例都用public staic final属性来保存
如果有必要,可以提供一些静态方法,允许其他程序根据特定参数来获取与之匹配实例。
在J2SE1.5之后,新增了一个enmu关键字,用以定义枚举类,它与普通类有以下区别:
枚举类可以实现一个或多个接口,使用enmu定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类,其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口
枚举类的构造器只能使用private访问控制符,如果省略了其构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定private作为控制符。
枚举类的所有实例必须在枚举类中显示列出,否则这个枚举类将永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰无需程序员显示添加。
所有的枚举类都提供了一个values方法,该方法可以很方便的遍历所有的枚举值.

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
枚举可以限定参数的个数具有数据安全性,对调用者的行为能更加严格地进行控制。把一些运行期的参数检查放到了编译期,出现枚举定义之外的值会报错,使属性值更具意义,而且被switch-case支持。方便数据库存储。如果按数字存储,一旦后期发生变化会导致数据库中信息混乱
回复 使用道具 举报
枚举是java 5新增了一个menu关键字(它与class、interface关键字的地位相同),用于定义枚举,枚举是一种特殊的类,它一样有自己的Fileld、方法,可以实现一个或多个接口,也可以定义自己的构造器。一个java源文件中最多只能定义一个public访问权限的枚举类,且该java源文件也必须和枚举类的类名相同。但枚举毕竟不是普通的java类,它与普通类有如下简单的区别:
1、枚举类可以实现一个活多个接口,使用menu定义的枚举直接继承了java.long.Enum类,而不是继承Object类。其中java.long.Enum类实现了java.long.Serializable和java.long.Comparable两个接口。
2、使用enum定义、非抽象的枚举默认修饰符为final,因此枚举不能派生子类。
3、枚举的构造器只能使用private访问控制符,如果省略了枚举的访问修饰符其默认为private修饰;如果加强制定访问修饰符则只能使用private。
4、枚举的所有实例必须在枚举的第一行显示列出,否则这个枚举永远都不能生产实例,列出这些实例时系统会自动添加public static final修饰,无需程序员显式添加

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
能在编译时期发现的问题最好不要等到运行时再处理枚举可以让某个类型变量的取值只能为若干规定值中的一个,可以让编译器在编译期间就能控制程序中的非法值。这时我们就定义一个特殊的类型:枚举。其中每个元素都是它的实例对象,即在声明该类是它的实例就固定好了不能是其它。不是的话就编译不合法
回复 使用道具 举报
能在编译时期发现的问题最好不要等到运行时再处理枚举可以让某个类型变量的取值只能为若干规定值中的一个,可以让编译器在编译期间就能控制程序中的非法值。这时我们就定义一个特殊的类型:枚举。其中每个元素都是它的实例对象,即在声明该类是它的实例就固定好了不能是其它。不是的话就编译不合法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马