一、定义:
类的对象是有限个、确定的。如:
性别:男、女;
线程状态:创建、就绪、运行、堵塞、死亡;
当需要定义一组常量时,强烈建议使用枚举类。
二、属性:
1、枚举类对象的属性不应允许被改动,所以使用private final修饰;
2、枚举类的属性应该在构造器中赋值;
3、若枚举类使用了含参构造器,列出枚举值时也必须传相应的参数;
三、自定义枚举类:
1、私有化类的构造器,保证不能在类的外部创建其对象;
2、在类的内部创建枚举类的实例,其实例声明为:public static final;
3、对象如果有实例变量,应该声明为private final ,并在构造器中初始话;
实例:
class Enumer1{
private final String SeasonName;
private final String SeasonDesc;
private Enumer1(String name,String desc){
this.SeasonName=name;
this.SeasonDesc=desc;
}
public static final Enumer1 SPRING=new Enumer1("春天","春暖花开");
public static final Enumer1 SUMMER=new Enumer1("夏天","夏日炎炎");
public static final Enumer1 AUTUMN=new Enumer1("秋天","秋高气爽");
public static final Enumer1 WINTER=new Enumer1("冬天","冰天雪地");
public String getSeasonName() {
return SeasonName;
}
public String getSeasonDesc() {
return SeasonDesc;
}
@Override
public String toString() {
return "Enumer1{" +
"SeasonName='" + SeasonName + '\'' +
", SeasonDesc='" + SeasonDesc + '\'' +
'}';
}
}
public class EnumerTest1 {
public static void main(String[] args) {
Enumer1 spring=Enumer1.SPRING;
System.out.println(spring);
}
}
四、使用enum定义枚举类
1、使用enum定义的枚举类默认继承了java.lang.Enum类,因此不能再继承其他类;
2、枚举类的构造器只能使用private访问修饰符;
3、枚举类第一行必须声明枚举类对象,并且实例之间用“,”隔开“;”结尾,其中public static final修饰由系统自动添加;
4、常用方法:
values()方法:返回枚举类型的对象数组;(该方法可以很方便的遍历所有的枚举值)
valueOf(String str)方法:可以把一个字符串转化为对应的枚举类对象,要求字符串和枚举类对象一致,否则运行是异常;
toString():返回当前枚举类对象常量的名称;
5、实现接口:
a、和普通java类一样可以实现一个或多个接口;
b、根据每个枚举值是否需要实现接口中方法的同一行为方式,可选择统一实现该方法或枚举值分别实现;
实例:
interface Inte{
public void show();
}
enum Enumer2 implements Inte{
SPRING("春天","春暖花开"){
@Override
public void show() {
System.out.println("春天很好");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("没人会喜欢这个夏天");
}
},
AUTUMN("秋天","秋高气爽"){
@Override
public void show() {
System.out.println("没有秋天");
}
},
WINTER("冬天","冰天雪地"){
@Override
public void show() {
System.out.println("今年没有冬天");
}
};
private final String SeasonName;
private final String SeasonDesc;
Enumer2(String seasonName, String seasonDesc) {
SeasonName = seasonName;
SeasonDesc = seasonDesc;
}
public String getSeasonName() {
return SeasonName;
}
public String getSeasonDesc() {
return SeasonDesc;
}
}
}
public class EnumerTest2 {
public static void main(String[] args) {
Enumer2 enumer2 = Enumer2.AUTUMN;
Enumer2 summer = Enumer2.valueOf("SUMMER");
summer.show();
Enumer2[] values = Enumer2.values();
for (int i=0;i<values.length;i++){
System.out.println(values[i]);
}
System.out.println(enumer2);
}
}
运行结果: