6.9.3 枚举类的成员变量 方法和构造器

6.9.3 枚举类的成员变量 方法和构造器

枚举类也是一种类,只是它是一种比较特殊的类,因此枚举一样可以定义成员变量、方法和构造器

枚举列成员变量使用private final修饰

  • 建议将枚举类的成员变量都使用private final修饰。

定义私有带参构造器来初始化成员变量

  • 如果将所有的成员变量都使用了final修饰符来修饰,所以要在构造器里为这些成员变量指定初始值,因此应该为枚举类显式定义带参数的构造器
  • 当然也可以在定义成员变量时指定默认值,或者在初始化块中指定初始值,但这两种情况并不常见。

一旦为枚举类显式定义了带参数的构造器,列出枚举值时就必须对应地传入参数

枚举类构造器不用显示调用

枚举类的构造器要定义为private,由枚举类的第一行代码定义的枚举类对象隐式调用。在枚举类第一行代码中列出的枚举值:MALE("男"), FEMALE("女");时,实际上就是隐式的调用构造器来创建枚举类对象,只是这里无须使用new关键字,也无须显式调用构造器。

在前面列出枚举值时无须传入参数,甚至无须使用括号,仅仅是因为前面的枚举类包含系统提供的默认无参数的构造器。

枚举类的构造器默认就是私有的,所以,定义构造器的时候可以省略private关键字。

如何获取枚举类对象

通过枚举类的valueOf静态方法即可获得枚举类的实例,调用的格式为:类名.valueOf("枚举实例名")

如何调用枚举类的实例方法

  1. 通过枚举类的valueOf方法获取到枚举类对象后,就可以通过该对象的实例方法了,调用的格式为枚举类对象.实例方法()
  2. 通过枚举类还有一个更简单的调用实例方法的形式,调用的格式为:枚举类类名.实例.实例方法().

如果获取枚举类对象的成员变量

  1. 在枚举类中定义getter方法
  2. 通过调用getter方法来获取成员变量,推荐使用枚举类类名.实例.getter()方法这种调用形式。

实例

目录结构

1
2
3
G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.9\best
├─Gender.java
└─Test.java

枚举类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public enum Gender {
// 隐式调用带参构造器为name成员变量赋值
MALE("男"), FEMALE("女");

// 相当于如下代码
// public static final Gender MALE new Gender("男");
// public static final Gender FEMALE new Gender("女");
// 定义成员变量
private final String name;

// 枚举类的构造器由第一行定义的枚举实例显示调用,所以只能使用private修饰
private Gender(String name) {
this.name = name;
}

public String getName() {
return this.name;
}
}

测试类:获取枚举实例中的成员变量值

1
2
3
4
5
6
7
8
9
public class Test {
public static void main(String[] args) {
Gender gender = Gender.valueOf("MALE");
System.out.println("枚举实例MALE的name成员变量的值为:" + gender.getName());
System.out.println("枚举实例MALE的name成员变量的值为:" + Gender.MALE.getName());
// 这样只能获取到枚举类对象
System.out.println("枚举实例MALE的name成员变量的值为:" + Gender.MALE);
}
}

运行结果如下:

1
2
3
枚举实例MALE的name成员变量的值为:男
枚举实例MALE的name成员变量的值为:男
枚举实例MALE的name成员变量的值为:MALE

可以看到这两种方式都可以正确调用getter方法,而且二中形式调用起来更方便.