黑马Java学习笔记之-----枚举
---------------------- android培训、java培训、期待与您交流! ----------------------
枚举: 关键字enum
在某些情况下,一个类的对象是有限而且固定的,例如星期,只有7个对象,四季,只有四个对象。这种实例有限而且固定的类,就是枚举类。
用普通类实现枚举功能:
1、通过private将构造器隐藏
2、把这个类的所有可能实例都使用public static final 修饰
3、可以提供一些静态方法,允许其他程序根据特定参数来获取实例
1 class Season{ 2 //Season类定义成不可变的,属性也用fianl修饰 3 private final String name; 4 5 //所有实例 6 public static final Season SPRING = new Season("春天"); 7 public static final Season SUMMER = new Season("夏天"); 8 public static final Season FALL = new Season("秋天"); 9 public static final Season WINTER = new Season("冬天"); 10 11 //构造函数为private的 12 private Season(String name){ 13 this.name = name; 14 } 15 16 public static Season getSeason(int seasonNum){ 17 switch(seasonNum){ 18 case 1: 19 return SPRING; 20 case 2: 21 return SUMMER; 22 case 3: 23 return FALL; 24 case 4: 25 return WINTER; 26 default: 27 return null; 28 } 29 } 30 31 }
枚举类和普通类的区别:
1、枚举类可以实现接口,枚举类默认继承java.lang.Enum类,而不是Object类。Enum类实现了Serializable和Comparable接口。
2、枚举类的构造器只能使用private反问控制符。
3、所有枚举类都提供了一个values方法,该方法可以很方便的遍历所有的枚举值。
enum Season{ SPRING,SUMMER,FALL,WINTER; }
枚举就是一个特殊的java类,可以定义属性、方法、构造函数、实现接口、继承类;
枚举总结:
1.构造方法必须定义成私有的
2枚举元素必须位于枚举体中的最开始部分。最后一个枚举元素后面加分号
3.只要用到枚举类,枚举类里的元素都会初始化,调用无参的构造方法
4.如要调用有参,在元素后面加括号——>里面传入相应的类型参数
5.枚举里只有一个元素时,就可以作为一种单例的实现方式。
1 import java.util.Date; 2 3 public class EnumTest { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 WeekDay1 weekDay = WeekDay1.MON; 11 System.out.println(weekDay.nextDay()); 12 13 WeekDay weekDay2 = WeekDay.FRI; 14 System.out.println(weekDay2); 15 System.out.println(weekDay2.name()); 16 System.out.println(weekDay2.ordinal()); 17 System.out.println(WeekDay.valueOf("SUN").toString()); 18 System.out.println(WeekDay.values().length); 19 20 new Date(300){}; 21 } 22 23 public enum WeekDay{ 24 25 SUN(1),MON(),TUE,WED,THI,FRI,SAT; 26 private WeekDay(){System.out.println("first");} 27 private WeekDay(int day){System.out.println("second");} 28 } 29 30 public enum TrafficLamp{ 31 RED(30){ 32 public TrafficLamp nextLamp(){ 33 return GREEN; 34 } 35 }, 36 GREEN(45){ 37 public TrafficLamp nextLamp(){ 38 return YELLOW; 39 } 40 }, 41 YELLOW(5){ 42 public TrafficLamp nextLamp(){ 43 return RED; 44 } 45 }; 46 public abstract TrafficLamp nextLamp(); 47 private int time; 48 private TrafficLamp(int time){this.time = time;} 49 } 50 }