您的位置:首页 > 职场人生

黑马程序员_枚举

2014-07-13 21:28 253 查看
 ------- android培训java培训、期待与您交流!
----------

枚举的定义:

        一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值。

此类问题在JDK 1.5 以前采用自定义带有枚举功能的类解决,Java 5.0以后可以直接使用枚举予以解决。

JDK 1.5 新增的Enum 关键字用于定义一个枚举类。

普通类模拟实现枚举功能:

         1、私有构造方法;

         2、每个元素分别用共有的静态成员变量表示;

         3、可以自定义若干个公有方法或抽象方法。

        例如:
public class WeekDay {
private WeekDay(){}
public static final WeekDay SUN= new WeekDay();
public static final WeekDay MON= new WeekDay();
public WeekDay nextDay() {
if (this == SUN) {
return MON;
}else {
return SUN;
}
}
public String toString() {
return this == SUN ? "SUN" : "MON";
}
}
        注意:可以采用抽象方法定义nextDay将大量的if...else语句转移到一个个独立的对象中实现。

        例如:
public abstract class WeekDay {
private WeekDay(){}
public static final WeekDay SUN= new WeekDay(){
public WeekDay nextDay() {
return MON;
}
};
public static final WeekDay MON= new WeekDay(){
public WeekDay nextDay() {
return SUN;
}
};
public abstract WeekDay nextDay();
public String toString() {
return this == SUN ? "SUN" : "MON";
}
}
       测试代码:
public class EnumTest {
public static void main(String[] args) {
WeekDay weekday = WeekDay.MON ;
System.out.println(weekday.nextDay());
}
}

Java5枚举的定义:

public enum WeekDay {
SUN,MON,TUE,WED,TUR,FRI,SAT;
}


        注意:最后一个枚举元素后面可以加分号,也可以不加分号。

        代码测试:

public class WeekDayTest {
public static void main(String[] args) {
WeekDay weekDay = WeekDay.SUN;
for (WeekDay weekDay1 : weekDay.values()) {
System.out.println("第一个是:"+weekDay1.ordinal()+" 星期:"+weekDay1.name());
}
WeekDay weekday = WeekDay.valueOf("SUN");
System.out.println(weekday);
int length = WeekDay.values().length;
System.out.println(length);
}
}
实现带有构造方法的枚举:
public enum WeekDay {
SUN(1),MON,TUE,WED,TUR,FRI,SAT ;//元素列表必须位于所有的成分之前,元素后加指定参数列表指明调用第二个方法
private WeekDay() {
System.out.println("first");
}
private WeekDay(int day) {
System.out.println("second");
}
}
实现带有抽象方法的枚举:

public enum TrafficLamp {
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time = time;
}
}
枚举类的总结:

        1、枚举是一种特殊形式的Java类。

        2、枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

        3、枚举类与Java中的普通类一样,在声明枚举类时,也可以声明属性、方法、和构造函数。但枚举类的构造函数必须为私有。

       
4、枚举类也可以实现接口、或继承抽象类。       

        5、JDK 1.5 中扩展了switch语句,它除了可以接收int, byte, char, short,String外,还可以接收一个枚举类型。

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

        7、枚举类的实例变量是把所以的枚举实例都加载一次的。

        8、如果调用某个枚举类,那么该枚举类会先把枚举类中的所有元素都加载一次。

 ------- android培训java培训、期待与您交流!
----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  黑马程序员