在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 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 } 注:希望与各位读者相互交流,共同学习进步。 因篇幅问题不能全部显示,请点此查看更多更全内容