1、 定义枚举类是通过关键字enum实现的,我们只需依次列出枚举的常量名。

2、enum的比较,虽然使用enum定义的枚举类是一种引用类型 ,并且

引用类型比较,要使用equals()方法,如果使用==比较,它比较的是两个引用类型的变量是否是同一个对象。因此,引用类型比较,要始终使用equals()方法。但是enum类型可以例外。这是因为enum类型的每个常量在JVM中只有一个唯一实例,所以可以直接用==比较

3、常用方法:

name()

返回常量名,例如:

String s = Weekday.SUN.name(); // "SUN"

ordinal()

返回定义的常量的顺序,从0开始计数,例如:

int n = Weekday.MON.ordinal(); // 1

注意: 改变枚举常量定义的顺序就会导致ordinal()返回值发生变化

4、优化

public class Main {
    public static void main(String[] args) {
        Weekday day = Weekday.SUN;
        if (day.dayValue == 6 || day.dayValue == 0) {
            System.out.println("Work at home!");
        } else {
            System.out.println("Work at office!");
        }
    }
}

enum Weekday {
    MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6), SUN(0);

    public final int dayValue;

    private Weekday(int dayValue) {
        this.dayValue = dayValue;
    }
}

原理:枚举类型反编译后的结果

public final class Weekday extends Enum { // 继承自Enum,标记为final class
    // 每个实例均为全局唯一:
    public static final Weekday MON= new Weekday (1);
    public static final Weekday TUE= new Weekday (2);
    public static final Weekday WED= new Weekday (3);
    public final int dayValue;
    .
    .
    等等。。。。
    // private构造方法,确保外部无法调用new操作符:
    private Weekday(int dayValue) {this.dayValue = dayValue;}
}

5、toString()方法可以进行重写

默认 toString 返回和name()一样的字符串

6、 枚举类可以应用在switch语句中。因为枚举类天生具有类型信息和有限个枚举常量

分类: Java

0 条评论

发表评论

电子邮件地址不会被公开。