1 //枚举综合测试
2 public class EnumTest {
3
4 /**
5 * @param args
6 */
7 public static void main(String[] args) {
8 // TODO Auto-generated method stub
9 WeekDay1 Mon=WeekDay1.MON;//实例化
10 System.out.println(Mon.nextday()); //调用枚举类内的方法
11 WeekDay weekday2=WeekDay.FRI;
12 System.out.println(weekday2);
13 System.out.println(weekday2.name());//显示枚举元素名称
14 System.out.println(weekday2.ordinal());//显示枚举元素索引
15 System.out.println(WeekDay.valueOf("SUN"));//根据字符串得到枚举对象
16 //WeekDay.values() 返回枚举元素数组
17 System.out.println(WeekDay.values().length);
18
19 System.out.println(TrafficLamp.valueOf("RED").nextlamp());
20 }
21
22 public enum WeekDay{
23 SUN(1),MON,TUE,WED,THI,FRI,SAT; //枚举元素必须位于第一位
24 /*枚举的构造方法必须私有*/
25 private WeekDay(){System.out.println("first");}
26 private WeekDay(int day){System.out.println("second");}
27 }
28
29 public enum TrafficLamp{
30 /*
31 * 带有抽象方法的枚举
32 * 每个元素都是枚举的子类
33 * 在枚举元素{}中 实现抽象方法
34 *
35 * 只有一个元素的枚举,可以实现单例模式
36 * */
37 RED(30){
38 public TrafficLamp nextlamp(){
39 return GREEN;
40 }
41 },GREEN(45){
42 public TrafficLamp nextlamp(){
43 return YELLOW;
44 }
45 },YELLOW(5){
46 public TrafficLamp nextlamp(){
47 return RED;
48 }
49 };
50
51 public abstract TrafficLamp nextlamp();
52 private int time;
53 private TrafficLamp(int time){this.time=time;}
54 }
55
56 }
57
1 //模拟枚举,枚举是一种特殊的类,每个元素都是枚举的实例对象,枚举可以有自己的属性和方法
2 public abstract class WeekDay1 {
3 private WeekDay1(){}//私有化构造函数,则外界无法实例化
4
5 public final static WeekDay1 MON=new WeekDay1(){
6
7 @Override
8 public WeekDay1 nextday() {
9 // TODO Auto-generated method stub
10 return SUN;
11 }
12 //WeekDay的子类,要实现抽象方法
13 };
14 //定义成员
15 public final static WeekDay1 SUN=new WeekDay1(){
16 @Override
17 public WeekDay1 nextday(){
18 return MON;
19 }
20 };
21
22 public abstract WeekDay1 nextday(); //定义一个抽象方法
23 /* public WeekDay nexday(){
24 this是指该对象,因为类的非静态方法只能有对象来调用
25 *
26 if(this==MON){
27 return SUN;
28 }else{
29 return MON;
30 }
31 }*/
32
33 public String toString(){
34 return this==MON?"MON":"SUN";
35 }
36
37 }
38