java 枚举如何定义
枚举定义基础语法
在Java中,枚举(enum)是一种特殊的类,用于表示一组固定的常量。基本定义语法如下:
public enum EnumName {
CONSTANT1,
CONSTANT2,
CONSTANT3
}
枚举常量通常使用大写字母命名,多个常量之间用逗号分隔,最后以分号结束。例如定义一个表示星期几的枚举:
public enum Day {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
枚举与属性和方法
枚举可以包含属性和方法,使其更具表现力。以下是一个带有属性和构造方法的枚举示例:
public enum Planet {
MERCURY(3.303e+23, 2.4397e6),
VENUS(4.869e+24, 6.0518e6),
EARTH(5.976e+24, 6.37814e6);
private final double mass;
private final double radius;
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double getMass() { return mass; }
public double getRadius() { return radius; }
}
枚举实现接口
枚举可以实现接口,允许定义抽象方法并在每个枚举常量中提供具体实现:
public interface Operation {
double apply(double x, double y);
}
public enum BasicOperation implements Operation {
PLUS {
public double apply(double x, double y) { return x + y; }
},
MINUS {
public double apply(double x, double y) { return x - y; }
};
}
枚举常用方法
Java枚举自动提供了一些有用的方法:
values():返回包含所有枚举常量的数组valueOf(String name):根据名称返回对应的枚举常量name():返回枚举常量的名称ordinal():返回枚举常量的序数(声明时的位置,从0开始)
使用示例:
Day[] days = Day.values();
Day monday = Day.valueOf("MONDAY");
String name = monday.name();
int position = monday.ordinal();
枚举与switch语句
枚举常与switch语句配合使用,提供清晰的控制流:
Day day = Day.MONDAY;
switch(day) {
case MONDAY:
System.out.println("星期一");
break;
case TUESDAY:
System.out.println("星期二");
break;
// 其他case...
}
枚举的单例模式实现
枚举是实现单例模式的最佳方式之一,既能防止反射攻击,又能保证线程安全:

public enum Singleton {
INSTANCE;
public void doSomething() {
// 单例方法实现
}
}






