黑马程序员_枚举
---------------------- android培训、java培训、期待与您交流! ----------------------
?
?
?????????枚举是jdk 1.5时推出的新特性,在jdk 1.5之前要想定义一个新的类型,有两种方式:定义类或者是接口,首先使用普通的java类模拟一个枚举的使用情况。
????????示例代码如下:
?
package heima.enumtest;class Season {public static final Season SPRING = new Season("春天");public static final Season SUMMER = new Season("夏天");public static final Season AUTUMN = new Season("秋天");public static final Season WINTER = new Season("冬天");private String name;private Season(String name) {this.setName(name);}public String getName() {return name;}public void setName(String name) {this.name = name;}public static Season getInstance(int num) {switch (num) {case 1:return SPRING;case 2:return SUMMER;case 3:return AUTUMN;case 4:return WINTER;default:return null;}}}public class SeasonTest01 {public static void main(String[] args) {Season sea1 = Season.getInstance(3);System.out.println(sea1.getName());Season sea2 = Season.getInstance(2);System.out.println(sea2.getName());}}?
?
?????????? 输出结果:秋天
????????????????????????? 夏天
????????
?????????? 下面再通过枚举实现此功能,示例代码如下:
?
?
package heima.enumtest;enum Season {// 枚举中的各项的定义必须放在枚举类的首行SPRING("春天"), SUMMER("夏天"), AUTUMN("秋天"), WINTER("冬天");private String name;// 枚举类型在定义构造方法时必须定义为私有的private Season(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}}public class SeasonTest02 {public static void main(String[] args) {Season sea1 = Season.AUTUMN;System.out.println(sea1.getName());Season sea2 = Season.SUMMER;System.out.println(sea2.getName());}}?
????????? 输出结果:秋天
????????????????????????? 夏天?
?
???????????通过以上对普通类型和枚举类型的比较可发现,当有这样的需求时即想要得到一个类的实例化对象而这些对象必须要求是在该类中已经定义的,不能是其他别的实例化对象,在这样的情况下发现使用普通的java类实现起来比较复杂一些,而如果使用jdk 1.5提供的枚举类型则比较方便省事。
?
????????? 下面是是一个包含抽象方法的枚举,示例代码如下所示:
?
?
package heima.enumtest;enum Season {// 枚举中的各项的定义必须放在枚举类的首行// 通过匿名内部类的形式对枚举类中的每一个枚举项进行实例化,并对抽象方法进行了复写SPRING("春天") {@Overridepublic Season getNextSeason() {return SUMMER;}},SUMMER("夏天") {@Overridepublic Season getNextSeason() {return AUTUMN;}},AUTUMN("秋天") {@Overridepublic Season getNextSeason() {return WINTER;}},WINTER("冬天") {@Overridepublic Season getNextSeason() {return SPRING;}};private String name;// 枚举类型在定义构造方法时必须定义为私有的private Season(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}// 在枚举类中定义一个抽象方法public abstract Season getNextSeason();}public class SeasonTest03 {public static void main(String[] args) {Season sea1 = Season.WINTER;System.out.println(sea1.getName() + "之后是:"+ sea1.getNextSeason().getName());Season sea2 = Season.SUMMER;System.out.println(sea2.getName() + "之后是:"+ sea2.getNextSeason().getName());}}?
????? 输出结果:?冬天之后是:春天
???????????????????????????????? 夏天之后是:秋天
?
?
?
---------------------- android培训、java培训、期待与您交流! ----------------------
?
详细请查看:http://edu.csdn.net/heima
?
?