概念:枚举主要用来定义一个有限集合内的固定值。
一、定义枚举
/**
* 季节枚举
*/
public enum SeasonEnum {
SPRING, SUMMER, AUTUMN, WINTER;
}
枚举编译后实际上继承了java.lang.Enum这个类。
二、常用方法
valueOf:返回指定的名字、给定类的枚举常量
toString:返回枚举常量名
oridinal:返回枚举常量在enum中的位置,从0开始
compareTo:比较枚举常量的顺序
values:返回所有的枚举数据
三、测试
示例代码如下:
/**
* @author qx
* @date 2023/06/20
* @desc 枚举测试
*/
public class SeasonTest {
public static void main(String[] args) {
// 根据字符串获取枚举
SeasonEnum seasonEnum = SeasonEnum.valueOf("SPRING");
System.out.println(seasonEnum);
System.out.println("---------------");
// 打印枚举数据
System.out.println(SeasonEnum.AUTUMN);
System.out.println("---------------");
// 返回枚举的位置
System.out.println(SeasonEnum.SUMMER.ordinal());
System.out.println("---------------");
// 比较枚举的顺序
System.out.println(SeasonEnum.SUMMER.compareTo(SeasonEnum.WINTER));
System.out.println("---------------");
// values方法获取所有的枚举
SeasonEnum[] seasonEnums = SeasonEnum.values();
for (SeasonEnum enumData : seasonEnums) {
System.out.println(enumData);
}
}
}
程序执行结果:
SPRING
---------------
AUTUMN
---------------
1
---------------
-2
---------------
SPRING
SUMMER
AUTUMN
WINTER
四、常见用途
枚举常常用于单例模式,能够保证对象的唯一性。
代码示例如下:
/**
* @author qx
* @date 2023/06/20
* @desc 枚举创建单例测试
*/
public class MyClass {
private MyClass() {
}
enum SingletonEnum {
INSTANCE;
private final MyClass myClass;
private SingletonEnum() {
myClass = new MyClass();
}
public MyClass getInstance() {
return myClass;
}
}
public static MyClass getInstance() {
return SingletonEnum.INSTANCE.getInstance();
}
public static void main(String[] args) {
System.out.println(MyClass.getInstance());
System.out.println(MyClass.getInstance());
}
}
程序执行结果:
day03.MyClass@1b6d3586
day03.MyClass@1b6d3586