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;
}
@Override
public 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;
}
@Override
public 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;
}
964

被折叠的 条评论
为什么被折叠?



