5,枚举 1.5以后的新特性。 > 枚举就是要【让某个类型的 变量的取值 只能为若干个 固定值 中的一个,否则,编译器就会报错】。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方法在开发阶段无法实现这一目标。 >> 普通类实现枚举功能 ----私有的构造方法 不能随便创建对象。 privateWeekDay(){} ----每个元素分别用一个公有的静态成员变量表示 public finalstatic WeekDay SUN = new WeekDay();//需要多少写多少元素。 ----可以有若干公有方法或抽象方法,例如,要提供nextDay方法必须是抽象的。采用抽象方定义nextDay就将大量的if.else语句转移成了一个个独立的类。 publicWeekDay nextDay(){ if(this==SUN0{ return MON; }else{ return SUM; } }-->public abstract WeekDay nextDay();成语写法为: public finalstatic WeekDay SUN =new WeekDay(){ publicWeekDay nextDay(){ return MON; } }; //隐式调用的: publicString toString(){ returnthis==NUM?"NUM":"SUM";//用大量if.else写出全部。 } //调用类中: main:WeekDayweekDay=WeekDay.MON; System.out.println(weekDay.nextDay());//SUM >> 枚举的基本应用(枚举的入门) ---自动生成toString()方法。 ---方法: 枚举类对象.name()//获取对象名称 枚举类对象.ordinal()//获取对象的排序位置,第几个。 枚举类.valueOf("str")//返回str对应的类的实例对象。 枚举类.values()//把枚举中的元素转换成数组,.length等对数组操作。 >> 实现带有构造方法的枚举 构造方法必须是被 private 修饰。 创建元素时,不带()的调用无参的构造方法。 带有()的由()中的内容确定调用的哪个有参构造方法。 >> 实现带有抽象方法的枚举 >> 注意: 1,枚举的元素列表 必须位于所有的成分 之前。 2,构造方法必须 私有。 3,创建元素时,自动调用对应参数的构造方法。有几个元素就调用几次构造方法。 4,元素后面的 ; 可以有也可以没有。当后面有内容时,要加 ; 。 5,【!】枚举只有一个成员时,就可以作为一种单例的实现方式。 单例可以用枚举实现。 枚举就是一个特殊的类,构造方法不用自己写了,默认的就是私有的,不带参数的。new Instance()代码也不用自己写了,元素自然的就new出来了。 >>从交通灯枚举类中可以获取: 1,内部类, 2,提高了一种编程的思想: 3,类的方法返回的类型可以是本类类型。 4,类里面可以定义静态常量。常量指向的结果就是自己这个类型的实例对象。 交通灯类: public enumTrafficLamp{ RED(30){ public TrafficLamp nextLamp(){ returnGREEN; } }, GREEN(45){ public TrafficLamp nextLamp(){ returnYELLOW; } }, YELLOW(5){ public TrafficLamp nextLamp(){ returnRED; } }; publicabstract TrafficLamp nextLamp(); privateint time; privateTrafficLamp(int time){this.time = time;} } |