标签:
枚举是JDK 5以后引入的,被称作新特性,虽然JDK 5推出已经N年了,不过鉴于这个版本在Java里程碑上的重要性,就姑且继续称作新特性吧。
枚举的定义:
1 public enum Lamp { 2 RED,GREEN,YELLOW; 3 }
枚举使用关键字enum定义,enum是enumeration的缩写。枚举的基本作用是将所需要的可选项罗列出来,以控制程序只能获得被罗列出的选项,可以当做是一种规范。而枚举元素通常采用全大写,因为枚举元素属于固定项,和常量类似。
枚举的每一个元素都代表这个枚举类本身。承上例:
1 public class EnumTest { 2 3 public static void main(String[] args) { 4 Lamp lamp = Lamp.GREEN; 5 } 6 7 }
使用"枚举类名.元素名"返回的永远是枚举类对象。我们可以利用这一特性进行这种设计,当前台传回一个字符串时,我们可以调用枚举类的valueOf()方法把它转换为一个枚举类对象,进而进行各种操作,这样就省去了我们大量的时间去制定将字符串转换为对象的规则。
枚举类同样可以具有抽象方法和普通方法:
1 public enum Lamp { 2 RED { 3 @Override 4 public Lamp nextLamp() { 5 return GREEN; 6 } 7 },GREEN { 8 @Override 9 public Lamp nextLamp() { 10 return YELLOW; 11 } 12 },YELLOW { 13 @Override 14 public Lamp nextLamp() { 15 return RED; 16 } 17 }; 18 19 public abstract Lamp nextLamp(); 20 21 public void say() { 22 System.out.println("Hello Enum"); 23 } 24 }
前文提到,枚举的每一个元素都代表一个枚举类对象,所以当定义了抽象方法后,每个枚举元素都应该去实现这个抽象方法。换句话说就是,每个枚举元素都相当于是继承自枚举类的一个子类,所以父类的抽象方法必须实现。另外,枚举类同样也可以有普通方法。
除了抽象和普通方法外,枚举类也可以具有构造方法:
1 public enum Lamp { 2 3 RED(20),GREEN,YELLOW; 4 5 private Lamp() { 6 7 } 8 9 private Lamp(int i ) { 10 System.out.println(i); 11 } 12 13 }
在枚举元素名后的括号内传入构造器所需参数,就可以调用对应构造器了,如:
1 public class EnumTest { 2 3 public static void main(String[] args) { 4 Lamp lamp = Lamp.RED; 5 //控制台输出20 6 } 7 8 }
最后要说明的是,枚举类里没有公共的构造方法,枚举是天生的单例,当你不提供构造方法时,枚举类默认提供的构造方法就是私有的,所以使用枚举类构造单例会比使用懒汉模式、饿汉模式来构造单例更简单。
当然,枚举的实际用处还是要在实际项目中才能得以体现,这次巩固复习的重点也就是这些了。
标签:
原文地址:http://www.cnblogs.com/jasongan/p/3870639.html