Bootstrap

【Java】枚举与注解篇

枚举类型

枚举类型基本概念

在日常生活中,我们经常会遇到一些固定取值的情况,比如一周有七天、一年有四季等。在 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;
}

不过这种方式存在不少问题:

  1. 类型不安全:我们可以传入任意整数,编译器不会检查传入的整数是否合法。
  2. 可读性差:当代码中使用这些整数时,很难一眼看出它们代表的具体含义。

而枚举类型的出现,完美解决了这些问题。

枚举类型的基本定义和使用

定义枚举类型

使用 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 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;