java枚举如何运用?

谢谢邀请,下面介绍一下枚举的用法认识枚举枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错,枚举可以让编译器在编译时就可以控制源程序赋给的非法值,使用普通变量的方式在开发阶段无法实现这一目标.在JDK1.5之后,使用关键字enum定义一种新的类型,称为枚举类型。JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定枚举的定义枚举的类名建议带上Enum后缀,枚举成员需要全大写,单词间用下划线隔开。

枚举其实是特殊的常量类,且构造方法被默认的强制私有。正确的命名方式为:ResultEnum的成员名称为: SUCCESS / UNKNOWN_REASON。定义规则如下:私有化类的构造器。成员变量如果声明为final。要在构造器中初始化,不允许被修改、通过公共方法 调用属性。枚举实例必须在前面需要在枚举实例后面加上分号,然后再写构造函数等。

枚举类默认提供了values()方法,该方法可以很方便得遍历所有的枚举值枚举类对象可以有属性若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数Enum类 与 enum关键字使用enum 关键字定义的枚举类,实际上就想当于定义了一个类,此类继承了Enum类而已集合对枚举的支持集合对枚举的支持,对于Set和Map接口而言又增加了两个新的子类: EnumSet 、EnumMap两个类:enum 类基本用法我们可以定义一个颜色的枚举:怎么调用呢,Java switch语句参数就支持enum类带构造方法的枚举定义规则:私有化类的构造器枚举实例必须在前面需要在枚举实例后面加上分号,然后再写构造函数等让枚举实现接口枚举类可以实现一个或多个接口。

与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法。如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自己的业务逻辑在枚举中定义抽象方法enum类是很特殊的一个类,实际上它是一个抽象类。枚举中可以用抽象方法,但是枚举中的每一个对象都分别实现抽象方法;枚举实现单例类1、借助JDK1.5添加的枚举来实现单例模式。

不仅能够避免多线程同步问题,而且还能防止反序列化重新创建新的对象.2、这种方式是Effective Java 作者 Josh Bloch 提倡的方式enum类和常量的区别这种方式在使用上跟枚举没有却别,但是我们为什么选择枚举呢?(1) 、类型不安全: 因为上面的每个颜色实际上时一个int 整数,因此完全可以把一个颜色当成一个int整数使用,例如进行加法运算RED GREEN,这样代码完全正常(2) 、 没有命名空间: 当需要使用颜色时,必须在前面加上COLOR_前缀,否则程序可能与其他类中的静态常量混淆。

(3) 、 打印输出的意义不明确:当输出某个季节时,例如输出COLOR_RED,实际 上输出的是1,这个1很难猜测它代表了红色.(4) 不容易扩展,每一个key对应一个值,枚举类与普通类区别使用 enum 定义的枚举类默认继承了 java.lang.Enum 类枚举类的构造器只能使用 private 访问控制符枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾). 列出的实例系统会自动添加 public static final 修饰Enum枚举类主要方法values()方法:返回枚举类型的对象数组。

java什么时候用常量,什么时候用枚举呢?

写代码是一种艺术,结构层次好的代码可以少出bug,提高效率。而在Java编程中,什么时候用常量,什么时候用枚举呢?曾经的我也迷茫过。当然,经历了多年的编程之后,也陆陆续续有了自己的思考。在我看来,具备一定规则的常量集合需要使用枚举类,既包含一年四季,一周七天这种自然枚举,也包含在编译时就知道所有可能值的其它情况,比如加减乘除等运算。

枚举值不必是固定的,可以在后面继续添加。而对于毫无规则归类可言的一些常量:如SUCCUSS字符串、密钥串、路径等等这些,可以放在一个常量类里面糅在一起。在《Effective Java》一书中,作者建议使用一般类加私有构造方法的方式,而在 sonar 代码质量扫描中,也将该方式定为常量类处理的推荐方式。

而相对于常量类,枚举的优点是很明显的。枚举更具可读性、更安全,并且功能更强大。许多枚举不需要明显的构造器和成员变量,而有些枚举通过为每个枚举值绑定数据,并且为这些数据提供函数,可以添加额外的功能,枚举值也可以直接用来进行数据库存储。总而言之,建议在具备相关性的前提下,能使勇枚举的地方一定要要用枚举,如果无法使用枚举时,建议使用带有私有构造函数的常量类。


文章TAG:枚举  java  enum  Java  泛型  
没有了