文章目录
- 枚举引入
- enum关键字实现枚举
- enum关键字实现枚举注意事项
- enum常用方法一览表
- enum课堂练习
- enum实现接口
枚举引入
创建Season
类, 实例化春夏秋冬四个实例
Season对象有如下特点
1.季节的值是有限的几个值(spring, summer, autumn, winter)
2.只读,不需要修改。
解决方案就是咱们即将提出的枚举
1)枚举对应英文(enumeration, 简写enum)
2)枚举是一组常量的集合。
3)可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。
public class Enumeration {
public static void main(String[] args) {
System.out.println(Season.AUTUMN);
}
}
// 演示定义枚举类
class Season {
// 1 构造器私有化防止直接new
// 2 只保留get,去掉set,防止属性被修改
// 3 在Season内部直接创建固定的对象
// 4 还可以再优化,使用static对象会使Season类加载,所以再加个final
private String name;
private String desc;
public final static Season SPRING = new Season("春天", "温暖");
public final static Season WINTER = new Season("冬天", "寒冷");
public final static Season AUTUMN = new Season("秋天", "凉爽");
public final static 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;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
1.不需要提供setXxx方法,因为枚举对象值通常为只读.
2.对枚举对象/属性使用final + static共同修饰,实现底层优化.
3.枚举对象名通常使用全部大写,常量的命名规范.
4.枚举对象根据需要,也可以有多个属性
enum关键字实现枚举
使用enum来实现前面的枚举案例,看老师演示,主要体会和自定义类实现枚举不同的地方。
package src.enum_;
public class Enumeration01 {
public static void main(String[] args) {
System.out.println(Season.AUTUMN);
}
}
// 演示定义枚举类
enum Season1 {
// 如果使用了enum来定义枚举类
// 1 使用关键字enum来替代class
// 2 常量名(实参列表)
// 3 如果有多个常量对象,使用`,`间隔即可
// 4 如果使用enum,要求常量对象放在类最前面
SPRING("春天", "温暖"),
SUMMER("夏天", "炎热"),
AUTUMN("秋天", "凉爽"),
WINTER("冬天", "寒冷");
private String name;
private String desc;
private Season1(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 + '\'' +
'}';
}
}
enum关键字实现枚举注意事项
1.当我们使用enum关键字开发一个枚举类时,默认会继承Enum类[如何证明]
2.传统的public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成SPRING(“春天”,“温暖”),这里必须知道,它调用的是哪个构造器.
3.如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略
4.当有多个枚举对象时,使用,
间隔,最后有一个分号;
结尾
5.枚举对象必须放在枚举类的行首.


enum常用方法一览表
-
toString:Enum类已经重写过了,返回的是当前对象名子类可以重写该方法,用于返回对象的属性信息
-
name:返回当前对象名(常量名) ,子类中不能重写
-
ordinal:返回当前对象的位置号,默认从0开始
-
values: 返回当前枚举类中所有的常量
-
valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!
-
compareTo:比较两个枚举常量,比较的就是编号!
enum课堂练习
1)声明Week枚举类,其中包含星期一至星期日的定义; MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
2)使用values返回所有的枚举数组,并遍历,输出下图效果
public class Enumerate02 {
public static void main(String[] args) {
Week[] weeks = Week.values();
for (Week week : weeks
) {
System.out.println(week);
}
}
}
enum Week {
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三"),
THURSDAY("星期四"),
FRIDAY("星期五"),
SATURDAY("星期六"),
SUNDAY("星期日");
private String name;
private Week(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
enum实现接口
1)使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum, 而Java是单继承机制。
2)枚举类和普通类一样,可以实现接口,如下形式。
enum 类名 implements 接口1,接口2{}