枚举类

  枚举类用于定义一组自定义常量。常量的类型为所定义的枚举类的类型。枚举类默认继承java.lang.Enum类,所以枚举类不能再继承其他类,不过枚举类可以实现接口。枚举类的定义包括2个部分:

枚举类声明部分

  一般的枚举类声明格式为:[public ]enum 枚举类名[ implements 接口名]

  访问限制符:public属于访问限制符。没有被访问限制符修饰的枚举类只能在当前包内被调用。

    public:被public修饰的枚举类是一个公共类。可以被任意类或对象调用。每个Java源文件只能有一个public修饰的枚举类。

  implements:实现其他接口。每个枚举类可以实现多个接口。省略该部分则表示没有实现任何接口。

枚举类类体部分

  枚举类的类体部分是常量的定义。常量定义时会自动调用枚举类的构造方法,所以每一个常量都相当于枚举类的一个实例。

  一般的常量定义格式为:常量名[(参数)]

  枚举类定义的多个常量之间用“,”隔开,最后一个常量之后加上“;”表示结束。

  如果枚举类没有定义构造方法,则会默认提供一个空的无参构造方法,此时可以直接使用常量名定义常量。例如:

1 enum Month {
2 
3     January, February, March, April, May, June, July, August, September, October, November, December;
4 
5 }
Month

  如果枚举类定义了成员变量,则需要提供一个带参构造方法为该成员变量赋值,此时需要在常量名后使用“( )”括起参数。例如:

 1 enum Week {
 2 
 3     Monday("周一"), Tuesday("周二"), Wednesday("周三"), Thursday("周四"), Friday("周五"), Saturday("周六"), Sunday("周日");
 4 
 5     private String zh_name;
 6 
 7     private Week(String name) {
 8         zh_name = name;
 9     }
10 
11     public String getName() {
12         return zh_name;
13     }
14 
15     @Override
16     public String toString() {
17         return super.toString() + "--" + zh_name;
18     }
19 
20 }
Week

  常量的定义需要放在前头,之后才能是成员变量、构造方法、方法等的定义。

  成员变量:枚举类成员变量的定义与类成员变量的定义相同。由于枚举类这一结构的初衷是设置常量,建议把枚举类成员变量都定义为私有变量,且只提供对应的getter方法,不提供对应的setter方法。

  构造方法:枚举类不支持通过程序来创建新实例,其构造方法的访问限制符只能为private,或者不加访问限制符。

  方法:枚举类方法的定义与类方法的定义相同。

枚举类的使用

获取枚举类型常量

  可以通过“枚举类名.常量名”的格式获取指定的常量。常量是枚举类的一个实例,所以常量的类型为枚举类类型。

  通过“枚举类名.values()”方法返回一个枚举类型数组,该数组包含了所有常量,顺序为常量定义的顺序。

常用的枚举类方法

  常用的枚举类方法主要有:

  1.String name()

     返回常量名。

  2.int ordinal()

     返回常量的位标(从0开始)。

测试

1 @Test
2 void testEnum() {
3     Month month = Month.January;
4     System.out.println(month);
5     System.out.println(month.name());
6     System.out.println(month.ordinal());
7     System.out.println(Arrays.asList(Month.values()));
8 }
testEnum

  输出结果:

 

  总结:

  1.直接输出一个常量,默认情况下会输出常量名。

  2.常量的位标与定义时的位标有关。

posted on 2019-06-12 23:39  寇德·坡特  阅读(547)  评论(0编辑  收藏  举报

导航