44-枚举(Enum)
2026/9/3 14:54:22 网站建设 项目流程

1.问题引出:常量管理的困难

在 Java 中,程序中经常会使用到一些固定的、不可修改的值(比如,星期几、月份、颜色、状态等)。在传统的 Java 编程中,我们通常使用常量来表示这些固定值,常量通常用public static final声明。例如:

public class Day { public static final int MONDAY = 1; public static final int TUESDAY = 2; public static final int WEDNESDAY = 3; // 其他星期... }

在这个例子中,使用常量来表示星期几。但这种方式有几个问题:

  • 类型不安全:我们使用int类型来表示不同的星期,但如果误用了其他整数(如5表示星期六),编译器无法发现。
  • 可读性差:数字123等并没有表达出它们实际代表的含义(星期一、星期二等)。
  • 容易出错:假如开发者在代码中误写了常量名(如错写了MONDA),或者想要维护新的值时,会面临大量的修改和出错的风险。

2.新方法解决对比:引入枚举类型

为了更好地管理常量并解决上述问题,Java 提供了枚举类型enum),它能让我们以更加结构化和安全的方式处理一组常量。使用枚举类型,我们不再使用intString来表示常量,而是通过枚举类型来定义这些常量。

新方法的优势:

  • 类型安全:枚举提供了类型检查,避免了使用错误的常量值。
  • 可读性强:枚举通过名字而不是数字或字符串来表示常量,使代码更加易于理解。
  • 避免重复:通过枚举类的唯一实例,避免了多个地方定义重复的常量。
  • 扩展性:如果需要添加新的常量,枚举类可以很方便地扩展。

3.新方法引出:什么是枚举?

枚举(enum)是 Java 中的一种特殊类,它表示一组固定,有限的对象。枚举类通过enum关键字定义,枚举中的每个常量其实都是该枚举类型的一个实例。

枚举类:把具体的对象一个一个(具体有限的值)例举出来的类。

4.枚举的定义

我们可以使用enum关键字来定义一个枚举类型。例如,我们可以用枚举来表示星期几:

enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;//等于调用Day这个类的无参构造器 }

在这个例子中,Day是一个枚举类型,它包含了七个常量

5.枚举的使用方式

(1)自定义枚举

1.类中 将构造器私有化(private),目的防止被直接 new

2.去掉set()方法,防止属性被修改。因为枚举对象通常只读

3.在类的内部,直接创建固定的对象

4.再优化,可以加入 final 修饰符

public class season { public static void main(String[] args) { private String name; private String desc;//描述 public static final Season SPRING = new Season("春天","温暖"); public static final Season WINTER = new Season("冬天","寒冷"); public static final Season AUTUMN = new Season("秋天","凉爽"); public static final Season SUMMER = new Season("夏天","炎热"); private Season(String name,String desc){ this.name = name; this.desc = desc; public String getname(){ return name; } public String getdesc(){ return desc; } public String getdesc() } }

细节:

(1)枚举对象名通常使用全部大写,常量的命名规范

(2)对枚举对象/属性使用 final + static 共同修饰,实现底层优化

(3)不需要提供set()方法,因为枚举对象通常只读

(4)枚举对象根据需要,也可以有多个属性

(2)使用enum关键字实现枚举

1.使用关键字 enum 替代 class
2.public static final Season SPRING = new Season("春天","温暖”),使用SPRING("春天""温暖")替代。形式:常量名(实参列表),实参会传给构造器
3.如果有多个常量(对象),使用号间隔
4.如果使用 enum 来实现枚举,要求将定义的常量对象写在最上面

public enum season { public static void main(String[] args) { SPRING("春天""温暖"),WINTER("冬天","寒冷"),AUTUMN("秋天","凉爽"),SUMMER("夏天","炎热"); private String name; private String desc;//描述 /* public static final Season SPRING = new Season("春天","温暖"); public static final Season WINTER = new Season("冬天","寒冷"); public static final Season AUTUMN = new Season("秋天","凉爽"); public static final Season SUMMER = new Season("夏天","炎热");*/ private Season(String name,String desc){ this.name = name; this.desc = desc; public String getname(){ return name; } public String getdesc(){ return desc; } public String getdesc() } }

注意事项:

(1)当我们使用 enum 关键字开发一个枚举类时,会隐式继承Enum类,并且枚举类是一个 final 类

(2)传统的 public static final Season SPRING = new Season("春天","温暖"); 简化成 SPRING("春天”,"温暖”), 这里必须知道,它调用的是哪个构造器。

只是简化了,但是成员的属性还是public static final 的

(3)如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略

(4)当有多个枚举对象时,使用,间隔,,最后有一个分号结尾

(5)枚举对象必须放在枚举类的行首,

(6)使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum,而Java是单继承机制

(7)枚举类和普通类一样,可以实现接口。

Enum类常用方法一览(自己创建的枚举类隐式继承了Enum类,所以也可以用父类的方法)

values()方法返回的是该枚举类所有定义的常量数组

示例:如何使用枚举表示星期几

enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;//使用无参构造器写法 // 示例方法:打印出对应的工作日 public boolean isWeekday() { return this != SATURDAY && this != SUNDAY; } } public class Test { public static void main(String[] args) { // 获取一个枚举常量 Day today = Day.MONDAY; // 输出今天是否是工作日 System.out.println(today.isWeekday()); // 输出 "true" // 增强型 for 循环 遍历枚举常量 for (Day day : Day.values()) { System.out.println(day); } //----------------------------------------------- Day[] days = Day.values(); // 获取所有的枚举常量 for (int i = 0; i < days.length; i++) { System.out.println(days[i]); // 通过索引访问每个枚举常量 } } } /*增强型 for 循环是 Java 5 引入的一种新语法,简化了遍历数组或集合的过程。它的基本语法如下: for (Type item : collection) { // 使用 item } Type 是集合中元素的类型。 item 是集合中的当前元素。 collection 是被遍历的数组、集合或其他可迭代对象。 这个循环的核心特点是它自动处理了索引和迭代的过程,所以你不需要手动维护索引。*/

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询