1. 枚举类型的定义
- 枚举(Enum) 是 Java 5 引入的一种特殊数据类型,用于定义一组固定的常量。
- 枚举常量是枚举类型的实例,通常用于表示一组相关的有限值(如星期、状态、方向等)。
- 示例:
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
2. 枚举类型的特点
- 类型安全:枚举常量是类型安全的,不能随意赋值。
- 不可变:枚举常量是单例的,不可被修改。
- 支持方法:枚举类型可以定义方法、构造函数和字段。
- 实现接口:枚举类型可以实现接口。
- 支持 switch 语句:枚举常量可以直接用于 switch 语句。
3. 枚举类型的原理
- 编译后的枚举类:
- 枚举类型在编译后会生成一个继承自
java.lang.Enum
的类。 - 每个枚举常量都是该类的静态实例。
- 枚举类型在编译后会生成一个继承自
- 示例解析:
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
- 编译后相当于:
public final class Day extends Enum<Day> {
public static final Day MONDAY = new Day("MONDAY", 0);
public static final Day TUESDAY = new Day("TUESDAY", 1);
// 其他常量...
private Day(String name, int ordinal) {
super(name, ordinal);
}
}
4. 枚举类型的常用方法
values()
:返回枚举类型的所有常量数组。valueOf(String name)
:根据名称返回对应的枚举常量。name()
:返回枚举常量的名称。ordinal()
:返回枚举常量的序号(从 0 开始)。compareTo(E o)
:比较两个枚举常量的顺序。
5. 枚举类型的高级用法
- 自定义字段和方法:
public enum Day {
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三");
private final String chineseName;
Day(String chineseName) {
this.chineseName = chineseName;
}
public String getChineseName() {
return chineseName;
}
}
- 实现接口:
public interface Displayable {
void display();
}
public enum Day implements Displayable {
MONDAY {
@Override
public void display() {
System.out.println("星期一");
}
},
TUESDAY {
@Override
public void display() {
System.out.println("星期二");
}
};
}
6. 枚举类型的优势
- 代码可读性:枚举常量具有明确的语义,提高了代码的可读性。
- 类型安全:避免了使用常量时可能出现的类型错误。
- 单例模式:枚举常量是单例的,天然支持单例模式。
- 扩展性:支持方法、字段和接口,功能强大。
示例代码
public class EnumExample {
public static void main(String[] args) {
Day day = Day.MONDAY;
System.out.println(day.getChineseName()); // 输出:星期一
for (Day d : Day.values()) {
System.out.println(d.name() + ": " + d.getChineseName());
}
}
}
enum Day {
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三");
private final String chineseName;
Day(String chineseName) {
this.chineseName = chineseName;
}
public String getChineseName() {
return chineseName;
}
}
总结
- 枚举类型 是 Java 中用于定义一组固定常量的特殊数据类型。
- 特点:类型安全、不可变、支持方法和接口。
- 原理:枚举类型在编译后会生成一个继承自
Enum
的类,每个枚举常量是该类的静态实例。 - 优势:提高代码可读性、类型安全、天然支持单例模式。
THE END
暂无评论内容