枚举与注解
枚举类型
枚举类型基本概念
在日常生活中,我们经常会遇到一些固定取值的情况,比如一周有七天、一年有四季等。在 Java 里,枚举类型(enum)就是用来表示这种一组固定常量的数据类型。
在 Java 出现枚举类型之前,我们通常用 public static final 来定义常量。比如,定义一周七天:
public class OldWeekDays {
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WEDNESDAY = 3;
public static final int THURSDAY = 4;
public static final int FRIDAY = 5;
public static final int SATURDAY = 6;
public static final int SUNDAY = 7;
}
不过这种方式存在不少问题:
- 类型不安全:我们可以传入任意整数,编译器不会检查传入的整数是否合法。
- 可读性差:当代码中使用这些整数时,很难一眼看出它们代表的具体含义。
而枚举类型的出现,完美解决了这些问题。
枚举类型的基本定义和使用
定义枚举类型
使用 enum 关键字来定义枚举类型。下面是定义一周七天的枚举类型示例:
public enum WeekDay {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
在这个例子中,enum 是定义枚举的关键字,WeekDay 是枚举类型的名称,花括号内列出的 MONDAY、TUESDAY 等就是枚举的实例,它们代表了一周中的每一天。注意,这些实例通常用大写字母表示,遵循常量命名规范。
使用枚举类型
定义好枚举类型后,就可以在代码中使用它。示例如下:
public class EnumUsageExample {
public static void main(String[] args) {
// 声明一个 WeekDay 类型的变量,并赋值为 MONDAY
WeekDay today = WeekDay.MONDAY;
System.out.println("今天是:" + today);
// 比较枚举实例
if (today == WeekDay.MONDAY) {
System.out.println("新的一周开始啦,加油!");
}
}
}
在上述代码中,我们首先声明了一个 WeekDay 类型的变量 today,并将其赋值为 WeekDay.MONDAY。然后使用 System.out.println 输出 today 的值,会直接打印出 MONDAY。在进行枚举实例比较时,使用 ==运算符就可以了,这是因为枚举实例是单例的,使用 == 比较非常方便且安全。
枚举类型的进阶特性
为枚举添加属性和方法
枚举类型不仅仅可以简单地表示常量,还可以像普通类一样拥有属性和方法。下面以太阳系行星为例,每个行星有质量和半径属性,并且可以计算表面重力:
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;
// 枚举的构造方法,必须是 private
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
// 计算行星表面重力的方法
public double surfaceGravity() {
// 万有引力常量
final double G = 6.67300E - 11;
return G * mass / (radius