enum:该关键字用于说明,当前类是一个枚举类
一、自定义枚举类
public class Test {
public static void main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
System.out.println(Season.AUTUMN);
System.out.println(Season.WINTER);
}
}
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 String desc;
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
二、使用enum关键字写枚举类
public class T {
public static void main(String[] args) {
System.out.println(Season2.SPRING);
System.out.println(Season2.SUMMER);
System.out.println(Season2.AUTUMN);
System.out.println(Season2.WINTER);
}
}
enum Season2{
SPRING("春","暖"),
SUMMER("夏","热"),
AUTUMN("秋","凉"),
WINTER("冬","冷");
private String name;
private String desc;
private Season2(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
三、enum关键字使用枚举注意事项:
1、使用enum关键字,默认会继承Enum类
2、传统的public static final Season SPRING = new Season(“XX”,“XX”)的写法简化成SPRING(“XX”,“XX”);的写法
3、如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略
enum Season2{
SPRING("春","暖"),
SUMMER("夏","热"),
AUTUMN("秋","凉"),
WINTER("冬","冷"),
SIJI;
private String name;
private String desc;
private Season2() {
}
private Season2(String name, String desc) {
this.name = name;
this.desc = desc;
}
}
4、当有多个枚举对象时,使用 “,” 分隔,结尾用 “;”
5、枚举类的常量必须放在枚举类的行首
常用的Enum类方法
public class Test {
public static void main(String[] args) {
// System.out.println(Season2.SPRING);
// System.out.println(Season2.SUMMER);
// System.out.println(Season2.AUTUMN);
// System.out.println(Season2.WINTER);
Season2 season2 = Season2.AUTUMN;
System.out.println(season2.name());//AUTUMN;输出枚举类常量名
System.out.println(season2.ordinal());//2;输出枚举类常量的次序/编号,从0开始
/*
返回枚举类常量数组:
Season{name='春', desc='暖'}
Season{name='夏', desc='热'}
Season{name='秋', desc='凉'}
Season{name='冬', desc='冷'}
Season{name='null', desc='null'}
*/
Season2[] values = season2.values();
for (Season2 season: values){
System.out.println(season);
}
//将字符传装换成枚举对象,要求字符串必须为已有的常量名,
// 否则报IllegalArgumentException(非法参数异常)
Season2 season = Season2.valueOf("AUTUMN");
System.out.println(season);//Season{name='秋', desc='凉'}
//比较两个枚举常量,比较的是位置编号
/**
* public final int compareTo(E o) {
* Enum<?> other = (Enum<?>)o;
* //self = season2;
* Enum<E> self = this;
* //运行类型比较 && 编译类型比较 false 返回类型转换异常
* if (self.getClass() != other.getClass() && // optimization
* self.getDeclaringClass() != other.getDeclaringClass())
* throw new ClassCastException();
* //返回:season2编号 - Season2.valueOf("SPRING")编号
* return self.ordinal - other.ordinal;
* }
*/
System.out.println(season2.compareTo(Season2.valueOf("SPRING")));//2
}
}