Java 枚举 Enumeration
枚举:
- 自定义枚举类
- 使用enum关键字
- 不需要提供setXxx方法, 枚举对象通常只读
- 对枚举对象使用static final, 实现底层优化
- 枚举对象可有多个属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package com.gibe; public class Enumeration { public static void main(String[] args) { System. out .println(Season.AUTUMN); System. out .println(Season.WINTER); } } class Season { private String name; private String desc; // 定义四个固定类属性 public static final Season SPRING = new Season( "spring" , "warm" ); public static final Season SUMMER = new Season( "summber" , "hot" ); public static final Season AUTUMN = new Season( "autumn" , "cool" ); public static final Season WINTER = new Season( "winter" , "cold" ); // 构造器私有, 防止new // 去掉setXxx, 防止属性被修改 // 在类内部, 直接创建固定对象 // 加入final 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 + '\ '' + "}" ; } } |
steps:
- 构造器私有化
- 本类内部创建对象
- 对外暴露对象 (public static final)
- 提供get方法, 不提供set方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package com.gibe; public class Enumeration { public static void main(String[] args) { System. out .println(Season.AUTUMN); System. out .println(Season.WINTER); } } enum Season { SPRING( "spring" , "warm" ), WINTER( "winter" , "cold" ), AUTUMN( "autumn" , "cool" ), SUMMER( "summer" , "hot" ); private String name; private String desc; private Season() { } private Season(String name, String desc) { this .name = name; this .desc = desc; } @Override public String toString() { return "Season{" + "name='" + name + '\ '' + ", desc='" + desc + '\ '' + '}' ; } public String getName() { return name; } public String getDesc() { return desc; } } |
- 使用enum关键字开发枚举类时,默认继承Enum类,而且时一个final类, javap 反编译
- 传统的 public static final Season2 SPRING = new Season2("春天", "温暖"); 简化成 SPRING("春天", "温暖"), 这里必 须知道,它调用的是哪个构造器
- 使用无参构造器 创建 枚举对象, 实参列表 () 都可省
1 2 3 | enum Gender{ BOY,GIRL; // 调用了Gender类的无参构造器 } |
enum枚举类方法
- name() 返回枚举类名称
- ordinal() 从 0 编号
- values() 反编译才能看到,返回 数组 含有定义所有枚举对象
- valueOf() 从String转为 enum对象
- compareTo 比较enum对象ordinal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package com; public class Enumeration { public static void main(String[] args) { Season autumn = Season.AUTUMN; System. out .println(autumn.name()); // AUTUMN System. out .println(autumn.ordinal()); // 2 Season[] values = Season.values(); for (Season value : values) System. out .println(value); Season autumn_ = Season.valueOf( "AUTUMN" ); System. out .println(autumn==autumn_); // true System. out .println(Season.AUTUMN.compareTo(Season.SPRING)); // 2 } } enum Season { SPRING( "spring" , "warm" ), SUMMER( "summer" , "hot" ), AUTUMN( "autumn" , "cool" ), WINTER( "winter" , "cold" ); private String name; private String desc; private Season() { } Season(String name, String desc) { this .name = name; this .desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } } |
Notice:
- 使用enum关键字后, 不能在继承其他类, enum会隐式继承Enum, Java单继承机制
- enum实现的枚举类, 可以实现接口
12345678910111213141516171819package com;
public
class
Enumeration {
public
static
void
main(String[] args) {
Music.music.play();
}
}
interface
Play{
public
abstract
void
play();
}
enum
Music implements Play{
music;
@Override
public
void
play(){
System.
out
.println(
"playing ..."
);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2020-07-08 operation
2020-07-08 namp & ncat
2020-07-08 rsync
2020-07-08 gcc编译选项
2020-07-08 Instrument: vim
2020-07-08 ntp服务配置
2020-07-08 C语言实现矩阵相乘