Java基础 8.23
1.枚举的两种实现方式
- 自定义类实现枚举
- 使用enum关键字实现枚举
2.自定义类实现枚举
- 不需要提供setXxx 方法,因为枚举对象值通常为只读
- 对枚举对象/属性使用final + static共同修饰,实现底层优化
- 枚举对象名通常使用全部大写,常量的命名规范
- 枚举对象根据需要,也可以有多个属性
package com.logic.enum_;/*** @author logic* @version 1.0*/
public class Enumeration02 {public static void main(String[] args) {System.out.println(Season.AUTUMN);System.out.println(Season.SPRING);}
}class Season {private String name;private String desc;public final static Season SPRING = new Season("春天", "温暖");public final static Season SUMMER = new Season("夏天", "热烈");public final static Season AUTUMN = new Season("秋天", "凉爽");public final static Season WINTER = new Season("冬天", "冷冽");//1.将构造器私有化 目的防止直接私有化//2.去掉setXxx()相关方法 防止属性被修改//3.在Season直接创建固定对象//4.优化 再加一个final修饰符private Season(String desc, String name) {this.desc = desc;this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}
小结:进行自定义类实现枚举,有如下特点:
- 构造器私有化
- 本类内部创建一组对象
- 对外暴露对象(通过为对象添加public final static修饰符
- 可以提供get方法,但是不要提供set
3.enum关键字实现枚举
快速入门
package com.logic.enum_;/*** @author logic* @version 1.0*/
public class Enumeration03 {public static void main(String[] args) {System.out.println(Season2.AUTUMN);System.out.println(Season2.SPRING);}
}enum Season2 {// 如果使用enum来实现枚举// 使用关键字 enum 替代 class// 1.public static final Season SPRING = new Season("春天","温暖")直接使用// 2.SPRING("春天","温暖")解读常量名(实参列表)// 3.如果有多个常量(对象),使用,号间隔即可// 4.如果使用enum来实现枚举,要求将定义常量对象,写在前面// 5.如果使用无参构造器 创建常量对象 则可以省略()SPRING("春天", "温暖"), SUMMER("夏天", "热烈"),AUTUMN("秋天", "凉爽"), WINTER("冬天", "冷冽");private String name;private String desc;// public final static Season2 SPRING = new Season2("春天", "温暖");
// public final static Season2 SUMMER = new Season2("夏天", "热烈");
// public final static Season2 AUTUMN = new Season2("秋天", "凉爽");
// public final static Season2 WINTER = new Season2("冬天", "冷冽");private Season2(String desc, String name) {this.desc = desc;this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}@Overridepublic String toString() {return "Season2{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}
enum关键字实现枚举注意事项
- 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类,使用javap 工具来演示
- 传统的public static final Season2 SPRING = new Season2("春天”"温暖"); 简化成 SPRING("春天","温暖”), 这里必须知道,它调用的是哪个构造器
- 如果使用无参构造器 创建枚举对象,则实参列表和小括号都可以省略
- 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
4.练习
package com.logic.enum_;/*** @author logic* @version 1.0*/
public class EnumExercise01 {public static void main(String[] args) {Gender boy1 = Gender.BOY;Gender boy2 = Gender.GIRL;System.out.println(boy1);System.out.println(boy1 == boy2);}
}enum Gender {BOY, GIRL;
}