Java枚举类需要注意的要点

1.为什么枚举类中的构造函数自动默认为private,并且不能改变?枚举中的构造函数是怎么运行的?

public class RegExpTest {
    public static void main(String[] args) {
        Color c1=Color.BLUE; //要注意的是当创建了Color类对象的时候,这个枚举类中的所有实例都会调用构造函数,因此也就会有三个输出出现
//        System.out.println(c1);
//        c1.colorInfo();
    }
}
enum Color
{
    RED, GREEN, BLUE; //它们本身就是枚举类Color的实例

    // 构造函数
    private Color() //之所以枚举类的构造函数是被private关键字修饰,是因为调用构造函数的对象是在Color之中,也就是RED, GREEN, BLUE
    {
        System.out.println("Constructor called for : " + this.toString());
    }

    public void colorInfo()
    {
        System.out.println("Universal Color");
    }
}

 运行结果是:

Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE

 

2.为什么枚举类型不能使用new来创建实例?

public enum Direction {
    FRONT, BEHIND, LEFT, RIGHT("红色");
}
Direction d = Direction.FRONT;

 

不能使用new来创建枚举类的对象,因为枚举类中的实例就是类中的枚举项,所以在类外只能使用类名.枚举项。 

 

3.枚举类在switch()中的用法:

在switch中,不能使用枚举类名称,例如:“case Direction.FRONT:”这是错误的,编译器会根据switch中d的类型来判定每个枚举类型,在case中必须直接给出与d相同类型的枚举选项,而不能再有类型。

Direction d = Direction.FRONT;
  switch(d) {
    case FRONT: System.out.println("前面");break;
    case BEHIND:System.out.println("后面");break;
    case LEFT:  System.out.println("左面");break;
    case RIGHT: System.out.println("右面");break;
    default:System.out.println("错误的方向");
}
Direction d1 = d;
System.out.println(d1);

 

posted @ 2021-04-17 18:42  一颗小红星  阅读(504)  评论(0编辑  收藏  举报