java高新技术:枚举,java高新技术枚举
分享于 点击 16137 次 点评:22
java高新技术:枚举,java高新技术枚举
为什么会有枚举?
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
普通类模拟实现枚举:
public abstract class WeekDay { private WeekDay(){};//构造方法私有化 public static final WeekDay SUN=new WeekDay() { public WeekDay nextDay() { return MON; } }; public static final WeekDay MON=new WeekDay() { public WeekDay nextDay() { return SUN; } }; // public WeekDay nextDay() // { // if(this==SUN) // return MON; // else // return SUN; // } public abstract WeekDay nextDay(); public String toString() { return this==SUN?"SUN":"MON"; } }
枚举的应用:
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
3.1带构造方法的枚举3.2带方法的枚举
- 构造方法必须定义成私有的
- 如果有多个构造方法,该如何选择哪个构造方法?
- 枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
3.3枚举只有一个成员时,就可以作为一种单例的实现方式。package EnumDemo; /* * 枚举相当于一个类,其中也可以定义构造方法,成员变量、普通方法和抽象方法 * * 枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面要有分号语气其他成员隔开, * 把枚举中的成员方法或变量,等放在枚举元素的前面,编译器报告错误 * * 带构造方法的枚举 * --构造方法必须定义成私有的 * --如果有多个构造方法,该如何选择哪个构造方法?在元素后面跟上一个括号然后可以选择有参或者无参的构造函数 * --枚举元素MON和MON()的效果一样,都是调用默认的构造方法 * * 带方法的枚举 * --定义枚举TrafficLamp * --实现普通的next方法 * --实现抽象的next方法,每个元素分别是由枚举类的子类来生成子类实例对象,这些子类才有类似内部诶的方式定义 * --增加上表示时间的构造方法 * */ public class enumDay { public static void main(String[] args) { //WeekDay w = WeekDay.AAA; /* System.out.println(w); System.out.println(w.name()); System.out.println(w.ordinal()); //返回枚举的序数 System.out.println(WeekDay.valueOf("CCC")); //返回带指定名称的枚举常量 System.out.println(WeekDay.values().length); */ TrafficLamp red = TrafficLamp.RED; TrafficLamp green = TrafficLamp.GREEN ; TrafficLamp yellow = TrafficLamp.YELLOW ; System.out.println(red.nextLamp()); System.out.println(green.nextLamp()); System.out.println(yellow.nextLamp()); } public enum WeekDay { AAA,BBB,CCC,DDD,EEE,FFF,GGG; private WeekDay() { System.out.println("空参构造函数"); } } //交通灯示例: public enum TrafficLamp { RED(10) { public TrafficLamp nextLamp() { return GREEN; } }, GREEN(20) { public TrafficLamp nextLamp() { return YELLOW; } }, YELLOW(5) { public TrafficLamp nextLamp() { return RED; } }; public abstract TrafficLamp nextLamp(); //定义一个抽象方法 private TrafficLamp(int time) //构造函数必须是私有的,对象一建立所有方法都初始化 { System.out.println(time); } } }
相关文章
- 暂无相关文章
用户点评