Java-枚举

枚举类的引入和模拟:

-------------------------------------------------------------------------------------------------

需求:定义一个Employee(员工),使用一个变量restday来表示他哪一天休息(一周的哪一天).

枚举是从Java5开始提供的一种新的数据类型,是一个特殊的类,就是固定的多个常量对象的集合.

定义格式:

[修饰符] enum  枚举类名

{

常量A,常量B,常量C;s

}

-------------------------------------------------------------------

我们自定义的枚举类型,在编译(在底层)都是直接继承于java.lang.Enum类的,Enum是所有枚举的父类(看下图).

枚举类的特点:

枚举特点:[这样写没任何意义。每一个特点都是通过具体的原因引入的,不是在这里写总结。]

① 枚举的直接父类java.lang.Enum,但是不能显示继承Enum

② 枚举就相当于一个类,可以定义构造方法、成员变量、普通方法和抽象方法。

③ 默认私有的造方法,即使不写访问权限也是private((假构造器,底层没有无参数构造器)。

④ 每个实例分别用一个全局常量表示,枚举类的对象是固定的,实例个数有限,不能使用new关键字。

⑤ 枚举实例必须位于枚举体中的最开始部分,枚举实例列表的后要有分号与其他成员相分隔

⑥ 枚举实例后有花括号时,该实例是枚举类的匿名内部类对象(查看编译后的class文件)。

枚举的使用:

1):枚举中都是全局公共的静态常量,可以直接使用枚举类名调用.

Weekday day = Weekday.SATURDAY;

2):因为java.lang.Enum类是所有枚举类的父类,所以所有的枚举对象可以调用Enum类中的方法.

String   name = 枚举对象.name();  //返回枚举对象的常量名称

int      ordinal = 枚举对象.ordinal();//返回枚举对象的序号,从0开始.

String  str       =  枚举对象.toString():返回 枚举对象的常量名称

   3):编译器生成的枚举类的静态方法(从反编译代码中):

枚举类型[]  values();

Weekday[] ws   = Weekday.values();:返回当前枚举类型所有的常量,使用一个数组封装起来.

枚举类型  valueof(String name);

Weekday  day = Weekday.valueOf("MONDAY");//把一个指定名称字符串转换为当前枚举类中同名的常量.

4):从java5开始出现枚举,switch也支持操作枚举类型.

switch只支持int类型,支持枚举是因为底层使用的枚举对象的ordinal,而ordinal的类型依然是int类型.

枚举主要用来表示事物固定的类型,慢慢去学.

---------------------------------------------

枚举的单例模式:

在<<effective java>>书中提到,建议使用枚举类做单例模式,很安全,即使使用反射也不能创建对象.

版权声明:
作者:yfeer
链接:https://www.yfeer.com/663.html
来源:个人编程学习网
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>