1 枚举类入门
- 对于对象有限且固定的类,使用枚举类。
- 使用
enum关键字
定义枚举类。(enum关键字和class、interface的作用相似) - 枚举类注意事项:
- 枚举类默认继承
java.lang.Enum
类。 - 非抽象枚举类默认使用
final
修饰,不能派生子类。 - 枚举类的实例必须在枚举类的第一行显式列出。(枚举类的实例只能是枚举值)
- 枚举类默认继承
package org.ywq.enumclass;
public enum SeasonEnum{
//在第一行列出枚举实例
SPRING,SUMMER,FALL,WINTER;
}
注意:
- 枚举类的实例通过
类名.实例名
调用。 - switch的控制表达式可以是任何枚举类型,case表达式的值可以直接用枚举值的名字,不需要添加枚举类作为限定。
package org.ywq.enumclass;
public class EnumClassTest {
public void judge(SeasonEnum s) {
switch (s) {
case SPRING:
System.out.println("春暖花开");
break;
case SUMMER:
System.out.println("夏日炎炎");
break;
case FALL:
System.out.println("秋高气爽");
break;
case WINTER:
System.out.println("冬日飘雪");
break;
}
}
public static void main(String[] args) {
for (SeasonEnum s : SeasonEnum.values()) {
System.out.println(s);
}
new EnumClassTest().judge(SeasonEnum.SPRING);
}
}
2 java.lang.Enum类
常用方法
Enum类的常用方法,可以由用户自己定义的枚举类使用。(继承)
Modifier and Type | Method | Description |
---|---|---|
String | name() | 返回此枚举实例的名称 |
public static <T extends Enum>T | valueOf(Class enumType, String name) | 返回枚举类中指定名称的枚举值 |
3 枚举类的成员变量和方法
- 枚举类的成员变量建议都设为
private final
. - 枚举类的构造方法一般显式定义带参数,因为枚举值要调用对应的构造器来创建,所以列出的枚举值也必须传入参数。
- 枚举类构造器使用
private
修饰,即不能新建枚举类对象。public enum Gender{ //枚举值要调用对应的构造器来创建 MALE("男"),FEMALE("女"); //等价于:public static final Gender MALE = new Gender("男"); // public static final Gender FEMALE = new Gender("女"); private final String name; //构造器 private Gender(String name){ this.name=name; } public String getName(){ return this.name; } }
4 枚举类实现接口
枚举类可以和普通类一样实现接口,但这种实现使得每个枚举实例的接口实现方法都一样。若要为每个枚举值提供不同实现方式,参照匿名对象实现:
//接口
public interface GenderDesc{
void info();
}
//枚举类实现接口
public enum Gender implements GenderDesc{
MALE("男"){
public void info(){
System.out.println("这个枚举值代表男性");
}
},
FEMALE("女"){
public void info(){
System.out.println("这个枚举值代表女性");
}
};
private final String name;
private Gender(String name){
this.name=name;
}
}
注意:此时的枚举值不是Gender枚举类的实例,而是Gender的匿名子类的实例。
5 抽象枚举类
- 枚举类中有抽象方法时,系统自动为其添加
abstract关键字
,不能手动添加。 - 枚举值中要重写枚举类的抽象方法。
package org.ywq.absenumclass;
public enum Operation {
ADD {
public double oper(double x, double y) {
return x + y;
}
},
SUB {
public double oper(double x, double y) {
return x - y;
}
},
MUL {
public double oper(double x, double y) {
return x * y;
}
},
DIV {
public double oper(double x, double y) {
return y == 0 ? y : x / y;
}
};
// 抽象方法
public abstract double oper(double x, double y);
public static void main(String[] args) {
System.out.println(Operation.ADD.oper(1.2, 2.1));
System.out.println(Operation.SUB.oper(1.2, 2.1));
System.out.println(Operation.MUL.oper(1.2, 2.1));
System.out.println(Operation.DIV.oper(1.2, 2.1));
}
}