目录
一、enum关键字实现枚举
二、注意事项
一、对Season2进行反编译(javap)
编辑
三、练习题
第一题
第二题
一、enum关键字实现枚举
package enum_;
public class Enumeration03 {
public static void main(String[] args) {
System.out.println(Season2.SPRING);
System.out.println(Season2.AUTUMN);
}
}
//演示使用enum关键字来实现枚举
enum Season2{
//定义了四个对象
//public static final修饰,因为是final修饰,所以必须是大写
// public static final Season2 SPRING = new Season2("春天", "温暖");
// public static final Season2 WINTER = new Season2("冬天", "寒冷");
// public static final Season2 SUMMER = new Season2("夏天", "炎热");
// public static final Season2 AUTUMN = new Season2("秋天", "凉爽");
//如果使用了enum关键字来实现枚举
//1.使用关键字 enum 来替代class
//2.SPRING("春天", "温暖"); 常量名/对象名(实参列表);
//3.如果有多个常量(对象),使用逗号间隔即可
//4.如果使用enum来实现枚举,要求将定义的对象,写在前面
SPRING("春天", "温暖"),WINTER("冬天", "寒冷"),
SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽");
//属性要放在枚举的对象的下面
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 "Season2{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
如果使用了 enum 来实现枚举类
1. 使用关键字 enum 替代 class
2. public static final Season SPRING = new Season("春天", "温暖") 直接使用SPRING("春天", "温暖") 解读 常量名(实参列表)
3. 如果有多个常量(对象), 使用 ,号间隔即可
4. 如果使用 enum 来实现枚举, 要求将定义常量对象, 写在前面
二、注意事项
一、对Season2进行反编译(javap)
使用enum关键字开发一个枚举类是,默认会继承Enum类,用javap来证明(反编译)
1.Season2是一个final类
2.定义的四个对象本质还是public static final修饰的
如果我们使用的是无参构造器, 创建常量对象, 则是常量名(),并且可以省略 ()
package enum_;
public class Enumeration03 {
public static void main(String[] args) {
System.out.println(Season2.SPRING);
System.out.println(Season2.AUTUMN);
}
}
//演示使用enum关键字来实现枚举
enum Season2{
//定义了四个对象
//public static final修饰,因为是final修饰,所以必须是大写
// public static final Season2 SPRING = new Season2("春天", "温暖");
// public static final Season2 WINTER = new Season2("冬天", "寒冷");
// public static final Season2 SUMMER = new Season2("夏天", "炎热");
// public static final Season2 AUTUMN = new Season2("秋天", "凉爽");
//如果使用了enum关键字来实现枚举
//1.使用关键字 enum 来替代class
//2.SPRING("春天", "温暖"); 常量名/对象名(实参列表);
//3.如果有多个常量(对象),使用逗号间隔即可
//4.如果使用enum来实现枚举,要求将定义的对象,写在前面
//5. 如果我们使用的是无参构造器, 创建常量对象, 则可以省略 ()
SPRING("春天", "温暖"),WINTER("冬天", "寒冷"),
SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽"),
//WHAT()调用的无参构造器,可以省略()
//WHAT()的原型是public static final Season2 WHAT = new Season2();
WHAT;
//属性要放在枚举的对象的下面
private String name;
private String desc;//描述
private Season2(){//无参构造器
}
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 "Season2{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
三、练习题
第一题
以下代码是否正确?
答案:正确的,在Gender类中隐藏着无参构造器,BOY和GIRL的完整写法是
public static final Gender BOY = new Gender();
public static final Gender GIRL = new Gender();
如果定义了有参构造器,那么上述代码就是错误的,需要显式的定义无参构造器
第二题
写出以下代码的输出结果
package enum_;
public class EnumExercise01 {
public static void main(String[] args) {
Gender boy = Gender.BOY;
Gender boy2 = Gender.BOY;
System.out.println(boy);
System.out.println(boy2);
boy.hi();
System.out.println(boy2 == boy);
}
}
enum Gender{
BOY,GIRL;
public void hi(){
System.out.println(BOY);
}
}
输出结果
分析:
package enum_;
public class EnumExercise01 {
public static void main(String[] args) {
Gender boy = Gender.BOY;//调用Gender类的对象BOY
Gender boy2 = Gender.BOY;//再次调用对象BOY
System.out.println(boy);//调用Gender的父类Enum的toString()方法,返回BOY
/*
public String toString() {
return name;
}
*/
System.out.println(boy2);
boy.hi();
System.out.println(boy2 == boy);//两者指向同一对象,true
}
}
enum Gender{
//1.创建两个Gender类的对象实例,名字分别为BOY何GIRL,没有实参
//2. public static final Gender BOY = new Gender();
//3. public static final Gender GIRL = new Gender();
BOY,GIRL;
public void hi(){
System.out.println(BOY);
}
}