枚举类(Enum Types)

本文深入探讨Java中的枚举类,介绍如何使用Enum关键字定义枚举类型,展示枚举类的强大功能,包括成员变量、方法及自动提供的静态方法values()。通过实例演示如何创建带有属性的枚举值并进行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class一样,通过Enum关键字来定义枚举类,来表示某个常量集合,因为是常量,其中的字段通常大写:

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}

java中的枚举类十分强大,本质上是class,因此包含成员变量和方法。当创建一个Enum时,编译器会自动加上一些特定方法,比如静态方法values,这个方法按照定义的顺序返回枚举类中的枚举值,可以跟for-each一同使用。

for (Planet p : Planet.values()) {
    System.out.printf("Your weight on %s is %f%n",
                      p, p.surfaceWeight(mass));
}

所有Enum隐式继承了java.lang.Enum,由于java不允许多重继承,因此枚举类不能再继承其他类。

java规定枚举类中,枚举值要先定义,然后再定义成员变量和方法。如果有成员,枚举值最后要加上分号;,枚举值之间用逗号,连接。

枚举值后面可以跟一个或多个参数,用圆括号括起来,创建枚举值时,这些参数会自动传给构造函数。枚举类的构造函数必须是package-privateprivate的,因为构造函数是自动调用创建枚举值的,不能用户手动调用。

public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);

    private final double mass;   // in kilograms
    private final double radius; // in meters
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }
    private double mass() { return mass; }
    private double radius() { return radius; }

    // universal gravitational constant  (m3 kg-1 s-2)
    public static final double G = 6.67300E-11;

    double surfaceGravity() {
        return G * mass / (radius * radius);
    }
    double surfaceWeight(double otherMass) {
        return otherMass * surfaceGravity();
    }
    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println("Usage: java Planet <earth_weight>");
            System.exit(-1);
        }
        double earthWeight = Double.parseDouble(args[0]);
        double mass = earthWeight/EARTH.surfaceGravity();
        for (Planet p : Planet.values())
           System.out.printf("Your weight on %s is %f%n",
                             p, p.surfaceWeight(mass));
    }
}

以上代码定义了太阳系八大行星的质量和半径,并且可以根据物体在地球的重量(单位:N)计算出该物体分别在八大行星的重量。

$ java Planet 175
Your weight on MERCURY is 66.107583
Your weight on VENUS is 158.374842
Your weight on EARTH is 175.000000
Your weight on MARS is 66.279007
Your weight on JUPITER is 442.847567
Your weight on SATURN is 186.552719
Your weight on URANUS is 158.397260
Your weight on NEPTUNE is 199.207413
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值