一、枚举类型介绍
在Java中,被 enum 关键字修饰的类型就是枚举类型,enum 的全称为 enumeration,它是 JDK 1.5 中引入的新特性。所有的枚举类型都是继承自Enum 类型。枚举是一组常量的集合,枚举属于一种特殊的类,里面只包含一组有限的特定的对象。
二、枚举类型使用案例
对于一周7天,一年4季,一天24小时都是有固定的一个对象,下面对案例进行代码实现:
public class EnumExercise { public static void main(String[] args) { Weeks MONDAY = new Weeks("周一"); Weeks TUESDAY = new Weeks("周二"); Weeks WEDNESDAY = new Weeks("周三"); Weeks THURSDAY = new Weeks("周四"); Weeks FRIDAY = new Weeks("周五"); Weeks SATURDAY = new Weeks("周六"); Weeks SUNDAY = new Weeks("周日"); } } } class Weeks{ //类 private String name; private String desc;//描述 public Weeks(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
单例类是一个类只有一个实例,那么多例类就是一个类有多个实例,但不是无限个数的实例,以上编写方式虽然创建了多个实例,但是并没有限制实例个数,从而不能体现一周是固定的七个对象,进而有枚举类型产生
三、枚举类型实现方式
1)自定义类实现枚举
- 将构造器私有化
- 在该类内部直接创建固定的对象
- 再加一个final修饰符
- 去掉set方法,防止属性被修改
代码实现:
public class EnumExercise { public static void main(String[] args) { //在此处调用Weeks的静态属性,只能访问到固定的属性,无法进行修改与添加 System.out.println(Weeks.MONDAY); System.out.println(Weeks.TUESDAY); } } } class Weeks{ //类 private String name; public static final Weeks MONDAY = new Weeks("周一"); public static final Weeks TUESDAY = new Weeks("周二"); public static final Weeks WEDNESDAY = new Weeks("周三"); public static final Weeks THURSDAY = new Weeks("周四"); public static final Weeks FRIDAY = new Weeks("周五"); public static final Weeks SATURDAY = new Weeks("周六"); public static final Weeks SUNDAY = new Weeks("周日"); public Weeks(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2) 使用 enum 关键字实现枚举
- 使用关键字enum
- SPRING("春天", "温暖") 常量名(实参列表)
- 有多个常量(对象), 使用 ,号间隔即可
- 使用 enum 来实现枚举,要求将定义常量对象,写在前面
- 使用无参构造器时,创建常量对象,则可以省略 ()
代码实现:
public class EnumExercise { public static void main(String[] args) { System.out.println(Week.MONDAY); System.out.println(Week.TUESDAY); } } enum Week{ MONDAY("周一"),TUESDAY("周二"),WEDNESDAY("周三"), THURSDAY("周四"),FRIDAY("周五"),SATURDAY("周六"),SUNDAY("周日"); private String name; Week(){ } Week(String name) { this.name = name; } @Override public String toString() { return name ; } }
- 当使用 enum 关键字开发一个枚举类时,默认会继承 Enum 类, 而且是一个 final 类
- 要清楚知道枚举对象调用的是哪个构造器.
- 如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略
- 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
- 枚举对象必须放在枚举类的行首
四、enum 常用方法
1) toString:Enum 类已经重写过了,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息
未重写前输出对象名,也就是SATURDAY:
重写后输出属性的信息也就是周六:
2) name:返回当前对象名(常量名),子类中不能重写
3) ordinal:返回当前对象的位置号,默认从 0 开始
4) values:返回当前枚举类中所有的常量
![]()
5) valueOf:将字符串转换成枚举对象,要求字符串必须 为已有的常量名,否则报异常!
根据你输入的 字符串 到 Week 的枚举对象去查找 , 如果找到了,就返回,如果没有找到,就报错
6) compareTo:比较两个枚举常量,比较的就是编号!
![]()
实质就是:Week.MONDAY的编号[1] - Week.SUNDAY的编号[7],所以输出-6