黑马程序员---java高新技术之枚举
2013-12-08 22:10
393 查看
-------
android培训、java培训、期待与您交流! ----------
枚举
JDK1.5引入了新的类型——枚举。
枚举就是要让某个类型的变量的取值只能为固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
每个元素分别用一个公有的静态成员变量表示
可以有若干个公有的方法或抽象方法,例如,要提供nextDay方法必须是抽象的。
1、 在JDK1.5 之前,我们定义常量都是: publicstaticfianl,有了枚举,我们可以定义一个有意义的枚举,元素当作常量来使用,并且是一个集合,表示的意义也就更多,枚举还提供了比常量更多的方法。
3、在枚举中定义自定义方法,并且必须在枚举实例序列的最后添加分号和定义在枚举实例后面。
android培训、java培训、期待与您交流! ----------
枚举
JDK1.5引入了新的类型——枚举。
为什么要有枚举:
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0;枚举就是要让某个类型的变量的取值只能为固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举的功能。
私有的构造方法每个元素分别用一个公有的静态成员变量表示
可以有若干个公有的方法或抽象方法,例如,要提供nextDay方法必须是抽象的。
public abstract class WeekDay1 { privateWeekDay1(){}//私有的构造方法 //公有的静态成员变量,父类的引用指向具体的子类对象 publicfinal static WeekDay1 SUN = new WeekDay1(){//内部类,并且是WeekDay1的子类 //实现WeekDay1中的抽象方法 publicWeekDay1 nextDay() { returnMON; } }; //公有的静态成员变量,父类的引用指向具体的子类对象 publicfinal static WeekDay1 MON = new WeekDay1(){//内部类,并且是WeekDay1的子类 //实现WeekDay1中的抽象方法 publicWeekDay1 nextDay() { returnSUN; } }; //实现WeekDay1中的抽象方法 publicabstract WeekDay1 nextDay();//定义抽象方法 }
枚举的应用
场景1:比较复杂的枚举事例:enum WeekDay{ SUN {//内部类,继承WeekDay并实现getNetday抽象方法 @Override WeekDay getNetday() { //TODO Auto-generatedmethod stub returnthis.MON; } },MON(1) {//创建该枚举实例时会调用带参数的构造函数,对其进行初始化 @Override WeekDay getNetday() { //TODO Auto-generatedmethod stub returnthis.SAT; } },SAT { @Override WeekDay getNetday() { //TODO Auto-generatedmethod stub returnthis.SUN; } }; private WeekDay(){}//私有的无参构造函数 private WeekDay(int day){}//私有的有参构造函数 abstract WeekDay getNetday();//枚举中定义一个抽象方法,具体由子类去实现 } 场景2:当枚举中的元素只有一个时,可以当作单例模式来使用 enum WeekDay{ SUN; private WeekDay(){ System.out.println(); }//私有的无参构造函数 }
1、 在JDK1.5 之前,我们定义常量都是: publicstaticfianl,有了枚举,我们可以定义一个有意义的枚举,元素当作常量来使用,并且是一个集合,表示的意义也就更多,枚举还提供了比常量更多的方法。
//定义一个最简单的枚举,元素有 MON,SUM,THU, public enum Weekday { MON,SUM,THU//元素当作常量来使用,通过Weekday.元素名的方式来获取元素,元素是指向本枚举实例的引用 } 2、 使用枚举,能让我们的代码可读性更强。由于枚举是我们主观意识定义的,用来表示生活中的一些集合体,因此枚举本身具备很强的可读性。 enum Signal { //用枚举来表示交通灯,GREEN表示绿灯, YELLOW表示红灯, RED表示绿灯 GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED;// color表示当前交通灯的颜色 public void change() { //结合switch语句,操作起来更加方便 switch (color) { case RED: color = Signal.GREEN;//红灯转绿灯 break; case YELLOW: color = Signal.RED;//黄灯转红灯 break; case GREEN: color = Signal.YELLOW;//绿灯转黄灯 break; } } }
3、在枚举中定义自定义方法,并且必须在枚举实例序列的最后添加分号和定义在枚举实例后面。
publicenumColor { RED("红色", 1), GREEN("绿色", 2),BLANK("白色", 3),YELLO("黄色", 4); //成员变量 private Stringname; privateintindex; //构造方法 private Color(String name,int index) { this.name = name; this.index = index; } //普通方法 publicstatic String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } returnnull; } // get set方法 public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } publicint getIndex() { returnindex; } publicvoid setIndex(int index) { this.index = index; } } 4、 覆盖枚举toString方法。 publicenumColor { RED,GREEN,YELLO; //覆盖方法 @Override public String toString() { returnthis.index+"_"+this.name; } } 5、 实现接口 publicinterfaceBehaviour { void print(); String getInfo(); } publicenumColorimplements Behaviour{ RED("红色", 1), GREEN("绿色", 2),BLANK("白色", 3),YELLO("黄色", 4); //成员变量 private Stringname; privateintindex; //构造方法 private Color(String name,int index) { this.name = name; this.index = index; } //接口方法 @Override public String getInfo() { returnthis.name; } //接口方法 @Override publicvoid print() { System.out.println(this.index+":"+this.name); } }
相关文章推荐
- 黑马程序员——Java高新技术之枚举
- 黑马程序员_java高新技术总结【1】(枚举和部分java新特性)
- 黑马程序员 Java高新技术---枚举
- 黑马程序员_java高新技术(1)枚举、反射、内省
- 黑马程序员_Java高新技术一_增强FOR、枚举
- 黑马程序员_java高新技术之枚举
- Java高新技术-枚举和反射-----黑马程序员
- 黑马程序员__JAVA高新技术--枚举及内省JavaBean、可变参数等知识点总结
- 黑马程序员——java高新技术:枚举
- 黑马程序员 Java高新技术---枚举
- 黑马程序员_java高新技术--枚举
- 黑马程序员_java高新技术(2)枚举
- 【黑马程序员】黑马入学准备篇:Java高新技术之 静态导入、可变参数、增强for循环、自动装箱、枚举
- 黑马程序员_java高新技术_枚举与反射
- 黑马程序员_Java高新技术(静态导入、可变参数、增强for循环、自动拆装箱、枚举、反射)
- 黑马程序员_java学习日记_Java高新技术_枚举
- 【黑马程序员】张孝祥Java高新技术_装箱拆箱、枚举、反射
- 黑马程序员——Java高新技术---枚举、内省、类加载器、注解
- 黑马程序员--张孝祥Java高新技术-JDK1.5新特性(二)【基本数据类型的自动拆箱与装箱,枚举】以及享元设计模式
- 黑马程序员_Java高新技术_枚举