黑马程序员_基础加强_枚举Enum

时间:2023-02-18 20:05:43

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

  Enum枚举:

一些程序在运行时,它需要的数据不能是任意的而必须是一定范围内的值,JDK5以前采用自定义类来解决,JDK5以后可以直接采用枚举解决,新增的enum关键字用于定义一个枚举类

特点

1、  Enum是所有枚举的公共基本类,继承自Object,具备Object中的方法。

2、  直接定义枚举值,枚举值相当于用默认构造函数创建的公有的静态常量本类对象。

3、  一个枚举也可以有构造函数、字段和方法,构造方法必须私有,定义有参构造方法后需要在枚举后添加参数调用。

4、  实现了Comparable接口,具备比较性。

枚举值:枚举中定义的枚举值相当于用默认构造函数创建的公有的静态常量本类实例化对象。

枚举类的枚举值只能在在前面,以逗号间隔,以分号结束。

功能:

name()返回此枚举常量的名称,在其枚举声明中对其进行声明。

ordinal()返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

valueOf(String name)静态方法,返回带指定名称的枚举常量,如果不包含指定名称的枚举值,抛出IllegalArgumentException异常。

valueOf()返回所有枚举常量的数组。

枚举类也可以实现接口、或继承抽象类,这时枚举中就有了抽象方法,利用带有抽象方法的枚举创建方式使用。

 JDK5中扩展了switch语句,它除了接收int外,还可以接收一个枚举类型

若枚举类只有一个枚举值,则可以当做单例设计模式使用。


最复杂的枚举事例:

public enum TrafficLamp{  //先定义三个元素,在元素后面填上大括号表示三个元素使用枚举的子类来完成的。
RED(30){
public TrafficLamp nextLamp(){//子类必须完成父类的抽象方法,注:这里的方法不能再抽象了。将abstract去掉
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};

public abstract TrafficLamp nextLamp();//这个方法的返回值还是TrafficLamp

//灯还需要有时间,所以需要成员变量
private int time;
private TrafficLamp(int time){this.time = time;}
}

}



---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------