黑马程序员--枚举

来源:互联网 发布:网络安全问题及对策 编辑:程序博客网 时间:2024/05/15 00:31

               ------------android培训java培训、期待与您交流!--------------


一、枚举概述

枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。

枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。

把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。

枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段

无法实现这一目标。

枚举只有一个成员时,就可以作为一种单例的实现方式。

自定义类实现枚举功能 
1、私有的构造方法。 
2、每个元素分别用一个公有的静态成员变量表示。 

3、可以自定义若干个公有方法或抽象方法。


模拟星期的枚举类(第一种方式)

package demo;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";}}

模拟星期的枚举类(第二种方式)

package cn.itcast.day1;public abstract class WeekDay1 {private WeekDay1(){}public final static WeekDay1 SUN = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {// TODO Auto-generated method stubreturn MON;}};public final static WeekDay1 MON = new WeekDay1(){@Overridepublic WeekDay1 nextDay() {// TODO Auto-generated method stubreturn SUN;}};public abstract WeekDay1 nextDay();/*public WeekDay nextDay(){if(this == SUN){return  MON;}else{return SUN;}}*/public String toString(){return this==SUN?"SUN":"MON";}}
第二种方式采用了抽象方法定义nextDay将大量的if...else语句转移到一个个独立的对象中实现。 

二、枚举类常用方法

public enum WeekDay{
SUN,MON,TUE,WED,THI,FRI,SAT;
}

                WeekDay weekDay2 = WeekDay.FRI;

System.out.println(weekDay2.name());//返回枚举对象的名称FRI
System.out.println(weekDay2.ordinal());//返回此枚举对象的在第几个位置
System.out.println(WeekDay.valueOf("SUN").);返回SUN对象
System.out.println(WeekDay.values().length);返回此枚举类拥有的对象个数


应用示例:

public class WeekDayTest { public static void main(String[] args) { WeekDay weekDay = WeekDay.SUN; for(WeekDay weekday: weekDay.values()){ System.out.println("第一个是:"+weekday.ordinal()+" 星期:"+weekday.name()); } WeekDay weekday = WeekDay.valueOf("SUN"); System.out.println(weekday); System.out.println(WeekDay.values().length);} }

三、带构造函数的枚举类
public enum WeekDay {SUN(1), MON(), TUE, WED, THI, FRI, SAT;private WeekDay() {System.out.println("first");}private WeekDay(int day) {System.out.println("second");}}
结果是Sun(1)调用的是带参数的构造函数,而其他的对象调用的是无参构造函数。


四、交通灯枚举

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;}}}


               ------------android培训java培训、期待与您交流!--------------

0 0
原创粉丝点击