黑马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 }

 


 

posted @ 2013-04-29 02:14  Mercy_K  阅读(166)  评论(0编辑  收藏  举报