黑马程序员_枚举

来源:互联网 发布:软件历史版本下载 编辑:程序博客网 时间:2024/06/07 02:57
 ------- 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培训、期待与您交流! ----------
0 0
原创粉丝点击