目录
一、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;}@Overridepublic 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;}@Overridepublic 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类的对象BOYGender boy2 = Gender.BOY;//再次调用对象BOYSystem.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);}}