JDK5新特性(自己实现枚举类)
* A:枚举概述
* 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。
* B:回想单例设计模式:单例类是一个类只有一个实例
* 那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。
枚举类第一种形式
下面两个图进行对比,第一个是自定义枚举类,第二种是使用enum来创建枚举类两个是一样的,只不过enum重写了toString方法,enum本身就是私有构造,不能进行实例化对象.
第二种形式
第三种形式,枚举类中的方法都是抽象方法自定义枚举类中需要使用匿名内部类来实现.在枚举类中那种形式也是相当于匿名内部类.
package com.heima.枚举;
public abstract class Week3 {
public static final Week3 MON = new Week3("星期一") {
public void show() {
System.out.println("星期一");
}
};
public static final Week3 TUE = new Week3("星期二"){
public void show() {
System.out.println("星期二");
}
};
public static final Week3 WED = new Week3("星期三"){
public void show() {
System.out.println("星期三");
}
};
private String name;
private Week3(String name){
this.name = name;
}
public String getName() {
return name;
}
public abstract void show();
}
package com.heima.枚举2;
public enum Week3 {
MON("星期一"){
public void show() {
System.out.println("星期一");
}
},TUE("星期二"){
public void show() {
System.out.println("星期二");
}
},WED("星期三"){
public void show() {
System.out.println("星期三");
}
};
private String name;
private Week3(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void show();
}
JDK5新特性(枚举的注意事项)
* 定义枚举类要用关键字enum
* 所有枚举类都是Enum的子类
* 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
* 枚举类可以有构造器,但必须是private的,它默认的也是private的。
* 枚举类也可以有抽象方法,但是枚举项必须重写该方法
* 枚举在switch语句中的使用
enum的方法
ordinal()序号,从0开始
compareTo() 比较的就是序号
name() 实例的名称
valueOf() 通过字节码对象获取枚举项
values()遍历获取每一个枚举项