1.枚举类引入
先来看一个需求:
要求创建(Animal)对象,请设计并完成该 Animal 类的基本信息属性,以及构造器与get方法,并在测试中输出十二生肖的信息。
需求很简单,我们只需要按照要求创建类,在测试类中创建对象即可,参考代码如下:
public class Main { public static void main(String[] args) { // 创建十二生肖 Animal rat = new Animal("子鼠"); Animal ox = new Animal("丑牛"); Animal tiger = new Animal("寅虎"); Animal rabbit = new Animal("卯兔"); Animal dragon = new Animal("辰龙"); Animal snake = new Animal("巳蛇"); Animal horse = new Animal("午马"); Animal sheep = new Animal("未羊"); Animal monkey = new Animal("申猴"); Animal rooster = new Animal("酉鸡"); Animal dog = new Animal("戌狗"); Animal pig = new Animal("亥猪"); // 打印信息 System.out.println(rat.getName()); System.out.println(ox.getName()); System.out.println(tiger.getName()); System.out.println(rabbit.getName()); System.out.println(dragon.getName()); System.out.println(snake.getName()); System.out.println(horse.getName()); System.out.println(sheep.getName()); System.out.println(monkey.getName()); System.out.println(rooster.getName()); System.out.println(dog.getName()); System.out.println(pig.getName()); } } /** * Animal类 */ class Animal{ private String name; // 十二生肖姓名 // 构造器 public Animal(String name) { this.name = name; } // getXxx public String getName() { return name; } }
分析代码发现,虽然需求我们成功的解决了,但是,对于十二生肖而言,它的对象(具体值),是固定的12个,不会再多。而当前设计类的思路,并不能体现十二生肖是固定的12个对象, 我们需要将需求添加如下限制:
1.十二生肖的值是有限的12个(rat、ox、tiger… …);
2.对象只读,不需要修改。
为了解决该需求,我们引出枚举的概念: 枚举是一组常量的集合,可以理解成,枚举是一种特殊的类,里面只包含一组有限的特定对象。
而枚举,我们通常有两种实现方式:(1)自定义枚举类实现;(2)使用 enum 关键字实现枚举。下面我们来分别通过(1)(2)两种方式实现十二生肖的需求。
2 自定义类实现枚举
2.1 自定义类实现枚举的步骤与特点
1️⃣ 不需要提供 setXxx 方法,因为 枚举类的对象值通常为只读;
2️⃣ 对枚举对象/属性使用 final + static 修饰,实现底层优化;
3️⃣ 枚举类对象名通常大写,这是常量的命名规范;
4️⃣ 将自定义类的构造器私有化,防止外部 new 新对象;
5️⃣ 在自定义类中创建一组对象,并对外暴露对象,即使用 final + static 修饰,让外部可以通过 类名.对象名 的方式直接访问到枚举对象。
2.2 按照步骤实现自定义类
🍑 自定义类参考代码:
🍌 测试代码如下:
🍎 测试结果:
Animal{name=‘子鼠’}
Animal{name=‘丑牛’}
Animal{name=‘寅虎’}
Animal{name=‘卯兔’}
Animal{name=‘辰龙’}
Animal{name=‘巳蛇’}
Animal{name=‘午马’}
Animal{name=‘未羊’}
Animal{name=‘申猴’}
Animal{name=‘酉鸡’}
Animal{name=‘戌狗’}
Animal{name=‘亥猪’}
3 enum关键字实现枚举
3.1 enum枚举类实现步骤
1️⃣ 使用 enum 关键字替代 class;
2️⃣ 相较于自定义枚举类,我们不需要再使用 public static final 修饰对象,只需要使用 对象常量名(实参列表) 的方式就行,如果是使用默认无参构造器,则可以省略小括号及实参列表;
在上面的例子中,public static final Animal RAT = new Animal("子鼠") 可以直接使用 Rat("子鼠") 来代替
3️⃣ 如果有多个常量(对象),则以,分隔, 最后一个常量后加分号;
4️⃣ 需要特别注意的是,使用 enum 实现枚举类,要将定义的常量对象,写在类的前面。
3.2 使用enum关键字解决需求
在这里,其实只需要将自定义类稍加修改就行(博主在偷懒,不要效仿嗷,手动狗头.jpg)。高情商:我们使用 enum 来优化代码~
Tips:在 idea 中 alt + shift + a 可以实现多光标同时修改,按 esc 退出。
Idea多光标编辑演示
🍑 枚举类参考代码:
测试类代码不需要作出改动,控制台测试结果如下:
Animal{name=‘子鼠’}
Animal{name=‘丑牛’}
Animal{name=‘寅虎’}
Animal{name=‘卯兔’}
Animal{name=‘辰龙’}
Animal{name=‘巳蛇’}
Animal{name=‘午马’}
Animal{name=‘未羊’}
Animal{name=‘申猴’}
Animal{name=‘酉鸡’}
Animal{name=‘戌狗’}
Animal{name=‘亥猪’}
3.3 使用enum枚举类的注意事项
1️⃣ 当使用 enum 关键字创建一个枚举类时,会 默认继承 Enum类;