Java分享笔记:自定义枚举类 & 使用enum关键字定义枚举类
在JDK1.5之前没有enum关键字,如果想使用枚举类,程序员需要根据Java语言的规则自行设计。从JDK1.5开始,Java语言添加了enum关键字,可以通过该关键字方便地定义枚举类。这种枚举类有自己的程序编写规则,并且具有一些特殊方法。
下面是笔者分别针对自定义枚举类和enum枚举类的程序设计。
[1] 自定义枚举类
1 /*------------------------- 2 JDK1.5之前通过自行设计程序,来自定义枚举类 3 下面以季节为例自定义枚举类 4 --------------------------*/ 5 package pack01; 6 7 public class Season { 8 public static void main(String[] args) { 9 10 FourSeasons spring = FourSeasons.SPRING; 11 FourSeasons winter = FourSeasons.WINTER; 12 13 System.out.println( spring.getName() ); 14 System.out.println( spring.toString() ); 15 System.out.println(); 16 System.out.println( winter.getName() ); 17 System.out.println( winter.toString() ); 18 } 19 } 20 21 // 定义表示季节的枚举类,共有4个内部对象 22 class FourSeasons { 23 24 // 定义类的属性:私有的,终态的,在构造器中进行初始化 25 private final String name; 26 27 // 将构造器私有化,使构造器不能在类的外部被使用 28 private FourSeasons(String name) { 29 this.name = name; 30 } 31 32 // get方法返回属性值 33 public String getName() { 34 return name; 35 } 36 37 // 覆盖toString方法,设置默认打印值 38 public String toString() { 39 return "This is " + name; 40 } 41 42 // 在类的内部创建对象 43 public static final FourSeasons SPRING = new FourSeasons("spring"); 44 public static final FourSeasons SUMMER = new FourSeasons("summer"); 45 public static final FourSeasons AUTUMN = new FourSeasons("autumn"); 46 public static final FourSeasons WINTER = new FourSeasons("winter"); 47 }
[2] 使用enum关键字定义枚举类
1 /*------------------------- 2 JDK1.5开始可以通过enum关键字来定义枚举类 3 使用enum关键字定义枚举类与自定义枚举类的程序编写不同之处: 4 ....//将关键字class用关键字enum替换 5 ....//必须在类体的一开始创建内部的对象,并遵循一定的书写规则 6 ....//枚举类有两个常用的方法: 7 ........//values():将枚举类中的所有对象以数组的方式返回 8 ........//valueOf(String arg0):将类中的某一个对象的名字以字符串的形式作为参数传入,返回该对象 9 ....//枚举类可以实现接口,覆盖接口中的抽象方法既可以写在枚举类的类体中,也可以写在对象后的花括号中 10 ........//若写在了对象后的花括号中,则该方法不再是所有对象公共的。不同对象调用同一方法时,可以得到不同的效果。 11 12 下面以季节为例使用enum关键字定义枚举类 13 --------------------------*/ 14 package pack02; 15 16 public class Season { 17 public static void main(String[] args) { 18 19 //测试枚举类中的values()方法 20 FourSeasons[] seasons = FourSeasons.values(); 21 for( int i=0; i<seasons.length; ++i ) { 22 System.out.println( seasons[i].getName() ); 23 } 24 System.out.println(); 25 26 //测试枚举类中的valueOf()方法,创建春天的对象 27 FourSeasons spring = FourSeasons.valueOf("SPRING"); 28 System.out.println( "valueOf(\"SPRING\"): " + spring.getName() + '\n' ); 29 30 //创建夏,秋,冬的对象 31 FourSeasons summer = FourSeasons.SUMMER; 32 FourSeasons autumn = FourSeasons.AUTUMN; 33 FourSeasons winter = FourSeasons.WINTER; 34 spring.printWords(); 35 summer.printWords(); 36 autumn.printWords(); 37 winter.printWords(); 38 //上面调用接口中的方法打印出来的结果,春天与其他三个季节是不同的,因为SPRING对象重新覆盖了接口中的方法 39 } 40 } 41 42 //定义一个接口,让枚举类来实现该接口 43 interface Inter{ 44 void printWords(); 45 } 46 47 // 定义表示季节的枚举类,共有4个内部对象 48 enum FourSeasons implements Inter { //使用enum关键字,并实现上述接口 49 50 //必须在类体中的一开始创建对象,对象之间用逗号分开,并且要遵循一定的书写规则 51 SPRING("spring"){ 52 public void printWords() {//在创建对象时可以单独重写接口中的方法,这时类体中的重写方法对于该对象将不再起作用 53 System.out.println("This is spring"); 54 } 55 }, 56 SUMMER("summer"), 57 AUTUMN("autumn"), 58 WINTER("winter"); 59 60 // 定义类的属性:私有的,终态的,在构造器中进行初始化 61 private final String name; 62 63 // 将构造器私有化,使构造器不能在类的外部被使用 64 private FourSeasons(String name) { 65 this.name = name; 66 } 67 68 // get方法返回属性值 69 public String getName() { 70 return name; 71 } 72 73 // 重写接口中的抽象方法 74 public void printWords() { 75 System.out.println("There are four different seasons."); 76 } 77 }
注:希望与各位读者相互交流,共同学习进步。