44-枚举(Enum)

发布时间:2026/9/3 14:55:14
44-枚举(Enum) 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表示星期六编译器无法发现。可读性差数字1、2、3等并没有表达出它们实际代表的含义星期一、星期二等。容易出错假如开发者在代码中误写了常量名如错写了MONDA或者想要维护新的值时会面临大量的修改和出错的风险。2.新方法解决对比引入枚举类型为了更好地管理常量并解决上述问题Java 提供了枚举类型enum它能让我们以更加结构化和安全的方式处理一组常量。使用枚举类型我们不再使用int或String来表示常量而是通过枚举类型来定义这些常量。新方法的优势类型安全枚举提供了类型检查避免了使用错误的常量值。可读性强枚举通过名字而不是数字或字符串来表示常量使代码更加易于理解。避免重复通过枚举类的唯一实例避免了多个地方定义重复的常量。扩展性如果需要添加新的常量枚举类可以很方便地扩展。3.新方法引出什么是枚举枚举enum是 Java 中的一种特殊类它表示一组固定有限的对象。枚举类通过enum关键字定义枚举中的每个常量其实都是该枚举类型的一个实例。枚举类把具体的对象一个一个具体有限的值例举出来的类。4.枚举的定义我们可以使用enum关键字来定义一个枚举类型。例如我们可以用枚举来表示星期几enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY//等于调用Day这个类的无参构造器 }在这个例子中Day是一个枚举类型它包含了七个常量5.枚举的使用方式1自定义枚举1.类中 将构造器私有化private目的防止被直接 new2.去掉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 替代 class2.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 是被遍历的数组、集合或其他可迭代对象。 这个循环的核心特点是它自动处理了索引和迭代的过程所以你不需要手动维护索引。*/