Java----枚举
2013-07-15 13:34
134 查看
高新技术 枚举
一、枚举
神马是枚举?
答:枚举就相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法。
枚举:枚举是一个特殊的类,枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值。普通变量的方式无法实现这一目标。也是JDK1.5以后出现的新特性。
练习:用普通类实现枚举功能,定义一个WeekDay的类来模拟枚举的功能。
另一种方式,由于nextDay方法采用大量的if else语句进行判断,阅读性很差,所以,将nextDay方法抽象,形成一个个独立的类。
实现带有构造方法的枚举:
特点:构造方法必须放在枚举列表之后,枚举列表在所有成员之前。如果枚举列表之后还有其他成员,需要在结尾添加“;”区分开。如果枚举元素带有构造方法,则需要在后面加“( 参数列表 )”。
实现带有抽象方法的枚举:
特点:带有抽象方法的枚举必须对抽象方法实现,在枚举元素后面加上方法的实现。
如:
一、枚举
神马是枚举?
答:枚举就相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法。
枚举:枚举是一个特殊的类,枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值。普通变量的方式无法实现这一目标。也是JDK1.5以后出现的新特性。
练习:用普通类实现枚举功能,定义一个WeekDay的类来模拟枚举的功能。
package cn.itcast.day1; public class EnumTest { public final static void main(String[] args) { // TODO Auto-generated method stub WeekDay weekday = WeekDay.MON; System.out.println(weekday.nextDay()); } }
package cn.itcast.day1; public class WeekDay { private WeekDay(){} public static WeekDay SUN = new WeekDay(); public static WeekDay MON = new WeekDay(); public WeekDay nextDay(){ if(this == SUN){ return MON; } else return SUN; } @Override public String toString() { // TODO Auto-generated method stub return this==SUN?"SUM":"MON"; } }
另一种方式,由于nextDay方法采用大量的if else语句进行判断,阅读性很差,所以,将nextDay方法抽象,形成一个个独立的类。
package cn.itcast.day1; public abstract class WeekDay { private WeekDay(){} public static WeekDay SUN = new WeekDay(){ @Override public WeekDay nextDay() { return MON; }}; public static WeekDay MON = new WeekDay(){ @Override public WeekDay nextDay() { return SUN; }}; abstract WeekDay nextDay(); @Override public String toString() { // TODO Auto-generated method stub return this==SUN?"SUM":"MON"; } }体验枚举:
package cn.itcast.day1; public class EnumTest { public final static void main(String[] args) { WeekDay weekday = WeekDay.MON; System.out.println(weekday.name());//.name()枚举名字 System.out.println(weekday.toString()); System.out.println(weekday.valueOf("FRI").name());//valueOf()将字符串转成枚举对象 System.out.println(weekday.values().length);//values()获取枚举数组 System.out.println(weekday.ordinal());//获取枚举所在数组的角标 //System.out.println(weekday.nextDay()); } public enum WeekDay { SUN,MON,TUE,WED,THI,FRI,SAT; } }
实现带有构造方法的枚举:
特点:构造方法必须放在枚举列表之后,枚举列表在所有成员之前。如果枚举列表之后还有其他成员,需要在结尾添加“;”区分开。如果枚举元素带有构造方法,则需要在后面加“( 参数列表 )”。
package cn.itcast.day1; public class EnumTest { public final static void main(String[] args) { WeekDay weekday = WeekDay.MON; System.out.println(weekday.name());//.name()枚举名字 System.out.println(weekday.toString()); System.out.println(weekday.valueOf("FRI").name());//valueOf()将字符串转成枚举对象 System.out.println(weekday.values().length);//values()获取枚举数组 System.out.println(weekday.ordinal());//获取枚举所在数组的角标 //System.out.println(weekday.nextDay()); } public enum WeekDay { SUN("SUM"),MON("MON"),TUE,WED,THI,FRI,SAT; private WeekDay() { System.out.println("first"); } private WeekDay(String s) { System.out.println("socend"); } } }
实现带有抽象方法的枚举:
特点:带有抽象方法的枚举必须对抽象方法实现,在枚举元素后面加上方法的实现。
如:
枚举元素{ 实现方法; }例:交通灯
package cn.itcast.day1; public class TrafficLampTest { public static void main(String[] args) { TrafficLamp lamp = TrafficLamp.YELLOW; System.out.println(lamp.nextLamp().name()); } }
package cn.itcast.day1; public enum TrafficLamp { RED(30) { @Override public TrafficLamp nextLamp() { return GREEN; } },GREEN(45) { @Override public TrafficLamp nextLamp() { return YELLOW; } },YELLOW(5) { @Override public TrafficLamp nextLamp() { return RED; } }; private int time; private TrafficLamp(int time) { this.time = time; } abstract TrafficLamp nextLamp(); }注:当枚举只有一个成员时,就可以作为单例模式的实现方式。
相关文章推荐
- java 枚举
- 比较java枚举成员使用equal还是==
- Effective Java笔记(不含反序列化、并发、注解和枚举)
- java高新技术_枚举反射内省(黑马程序员)
- MyBatis 中如何调用 Java 的 enum (枚举) 字段
- 黑马程序员——java中的枚举
- 黑马程序员_高新技术:2) 枚举、内省JavaBean
- 为什么要用枚举实现Singleton--java
- Java中的枚举类型
- java 注解 Target 枚举中的含义
- java1.5新特性之枚举总结
- java 枚举
- java8——使用lambda和枚举实现简洁、可读性良好的策略模式
- Java枚举详解及使用实例(涵盖了所有典型用法)
- Java 中的枚举
- 黑马程序员_java学习日记_Java高新技术_枚举
- Java记录 -79- 枚举(Enums)
- 深入探讨Java枚举的实现
- 说说Java中的枚举(小姐)
- Java 枚举与类的区别