本质也是一种类,只不过这个类的对象是有限的、固定的几个,不能让用户随意创建
定义
jdk5.0之前
class Season {
private final String name;
private final String desc;
// 私有化类的构造器
private Season(String name,String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {return name;}
public String getDesc() {return desc;}
// 创建当前类的实例,需要使用public static final修饰
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 ("冬","冬");
}
class A {
public void show() {
System.out.print(Season.SPRING);
}
}
jdk5.5及之后
使用关键字enum定义的枚举类,默认继承了java.lang.Enum
enum Season {
// 必须在枚举类的开头声明多个对象,对象之间使用,隔开
SPRING("春","春"),
SUMMER("夏","夏"),
AUTUMN("秋","秋"),
WINTER("冬","冬");
// 声明当前类的对象的实例变量,使用private final修饰
private final String name;
private final String desc;
// 私有化类的构造器
private Season(String name,String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {return name;}
public String getDesc() {return desc;}
}
class A {
public void show() {
System.out.print(Season.SPRING);
}
}
使用enum定义枚举类,当枚举常量不存在成员变量时
enum Season{
SPRING,SUMMER,AUTUMN,WINTER;
}
java.lang.Enum常用方法
// 默认返回常量的名称(对象名)。可以手动重写
toString()
// 返回枚举类型的对象数组,是一个静态方法
values()
// 可以把一个字符串转换为对应的枚举类对象,要求字符串必须是枚举类对象的“名字”,是一个静态方法
// 当前枚举类中不存在名字为name的对象,则报错
valueOf(String name)
// 得到当前枚举类常量的名称,建议优先使用toString()
name()
// 返回当前枚举常量的次序号,默认从0开始
ordinal()
允许实现接口
第一种情况:在枚举类中重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是同一个方法
interface Info{
void show();
}
enum Season implements Info {
public void show() {
}
}
第二种情况:让枚举类中每一个对象重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是同一个方法
interface Info{
void show();
}
enum Season implements Info {
// 必须在枚举类的开头声明多个对象,对象之间使用,隔开
SPRING("春","春") {
public void show() {
}
},
SUMMER("夏","夏") {
public void show() {
}
},
AUTUMN("秋","秋") {
public void show() {
}
},
WINTER("冬","冬") {
public void show() {
}
};
private final String name;
private final String desc;
private Season(String name,String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {return name;}
public String getDesc() {return desc;}
}
枚举类实现单例
jdk5.0之前
class Bank{
private Bank(){}
public static final Bank instance = new Bank();
}
jdk5.0及之后
// 情况1
enum Bank{
CPB;
}
// 情况2
enum Bank{
CPB("银行");
private final String name;
private Bank(String name) {
this.name = name;
}
}