java1.5新特性之枚举总结
2013-03-23 01:13
429 查看
这里说的枚举不是Enumeration. Enumeration是Vector集合中的迭代器,并且已经被Iterator取代.
枚举相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。那么为什么要用枚举不直接用普通的类?
在枚举当中声明的所有元素默认都是public static final修饰(当然,不需要也不允许显示的写出来.枚举的元素前面不能有任何修饰符),并且枚举的构造函数一定要是私有的.
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
枚举的元素一定要位于枚举体的最前面,否则编译不通过.
枚举只有一元素时,就可以作为一种单例的实现方式。
例如一个类用来描述交通信号灯,信号灯的颜色已经固定了,只能是红,黄,绿.这时就可以用枚举来实现.
枚举相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。那么为什么要用枚举不直接用普通的类?
在枚举当中声明的所有元素默认都是public static final修饰(当然,不需要也不允许显示的写出来.枚举的元素前面不能有任何修饰符),并且枚举的构造函数一定要是私有的.
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
枚举的元素一定要位于枚举体的最前面,否则编译不通过.
枚举只有一元素时,就可以作为一种单例的实现方式。
例如一个类用来描述交通信号灯,信号灯的颜色已经固定了,只能是红,黄,绿.这时就可以用枚举来实现.
public class EnumTest { public static void main(String[] args) { TrafficLamp lamp1=TrafficLamp.RED;//用类名去调用静态成员一样的方式. TrafficLamp lamp2=TrafficLamp.YELLOW; System.out.println(lamp1.nextLamp());//GREEN lamp1.setTime(60);//经测试 这个time属性是可以改的,虽然枚举元素中写的是RED(50) System.out.println(lamp1.getTime());//50改成了60 System.out.println(lamp2.getTime());//YELLOW调用的空参构造方法,这里返回为0 System.out.println(lamp1.name());//RED 返回此枚举常量的名称 System.out.println(lamp1.toString());//RED 更推荐使用这个方法,必要时可以重写 System.out.println(lamp2.ordinal());//返回枚举常量的序数,经测试就是出现的顺序,从0开始.YELLOW的序数是2. //valueOf()这个静态方法我对着API看了半天最终确定 返回的是个枚举的对象... //而且 写成Trafficlamp.valueOf("GREEN") 结果一样..... System.out.println(TrafficLamp.valueOf(TrafficLamp.class,"GREEN").nextLamp());//YELLOW TrafficLamp[] lamps = TrafficLamp.values (); //values() 方法返回的是枚举类所有的元素集合 for(TrafficLamp lamp:lamps) { System.out.print(lamp);//不用name()方法也可以直接打印出来.... } } public enum TrafficLamp { RED(50)//每个元素就是枚举的一个子类实例对象.用匿名内部类的方式定义.一定要写在最前面. { public TrafficLamp nextLamp() { return GREEN; } }, GREEN(40) { public TrafficLamp nextLamp() { return YELLOW; } }, YELLOW()//这里调用的就是空参的构造方法. { public TrafficLamp nextLamp() { return RED; } }; private int time; abstract TrafficLamp nextLamp();//抽象方法 TrafficLamp(){}//空参构造方法 TrafficLamp(int time) { this.time=time; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } } }
相关文章推荐
- 黑马程序员 知识点总结-Java JDK 1.5 新特性和枚举
- Java基础---枚举及部分JDK1.5新特性 (黑马程序员)
- <黑马程序员>枚举--(java基础加强1.5新特性)
- 黑马程序员<Java 1.5新特性>静态导入、增强for、可变参数、自动装箱拆箱、枚举
- Java高级特性之枚举学习总结
- Java1.5语言新特性简单总结
- Java1.5语言新特性简单总结
- Java高级特性之枚举学习总结
- 黑马程序员_eclipse的使用和java1.5新特性以及枚举
- java1.5语言新特性简单总结
- JDK核心API:Java1.5语言新特性简单总结
- java 1.7 1.5的新特性总结
- JAVA1.5新特性----枚举Enum
- 黑马程序员_java高新技术总结【1】(枚举和部分java新特性)
- 黑马程序员———Java1.5 新特性之枚举
- Java1.5语言新特性简单总结
- JDK核心API:Java1.5语言新特性简单总结
- java基础总结大全jdk1.5的新特性
- Java1.5语言新特性简单总结
- Java1.5语言新特性简单总结