Java 枚举

Java 枚举

枚举是一种特殊类型的数据使得其能够成为一个变量,值是一组预定义的常量,变量值必须等于为其预定义的值之一。
常见示例包括方向(NORTH,SOUTH,EAST和WEST的值)和星期几
因为它们是常量,所以枚举类型字段的名称是大写字母

1.使用

使用enum关键字定义枚举类型。
例如,可以将星期几的枚举类型指定为:

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

1.1 使用说明

枚举类主体可以包括方法其他字段
编译器在创建枚举时会自动添加一些特殊方法
例如,它们有一个静态values方法,它按照声明的顺序返回一个包含枚举值的所有值的数组。
此方法通常与for-each构造结合使用,以迭代枚举类型的值。
例如,Planet下面的类示例中的代码迭代太阳系中的所有行星。

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

注意:所有枚举都隐式扩展java.lang.Enum。因为类只能扩展一个父类(请参阅 声明类),
所以Java语言不支持多重继承状态(请参阅 状态,实现和类型的多重继承),因此枚举不能扩展其他任何内容。

在以下示例中,Planet是一个枚举类型,表示太阳系中的行星,它们具有恒定的质量半径属性
每个枚举常量都声明为质量半径参数的值,创建常量时,这些值将传递给构造函数。
Java要求在任何字段或方法之前首先定义常量,此外,当存在字段和方法时,枚举常量列表必须以分号结尾

注意:枚举类型的构造函数必须是包私有或私有访问。它会自动创建在枚举主体开头定义的常量。您不能自己调用​​枚举构造函数。

除了它的属性和构造函数之外,Planet还有一些方法可以让你检索每个行星上一个物体的表面重力和重量。
这是一个示例程序,它可以减轻地球上的重量(在任何单位)并计算并打印所有行星上的重量(在同一单位):

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) {
        for (Planet p : Planet.values()) {
            double mass = p.mass();
            double radius = p.radius();
            System.out.printf("Your weight on %s is %f%n", p, mass, radius);
        }
    }
}

结果:

Your weight on MERCURY is 330300000000000000000000.000000
Your weight on VENUS is 4869000000000000000000000.000000
Your weight on EARTH is 5976000000000000000000000.000000
Your weight on MARS is 642100000000000000000000.000000
Your weight on JUPITER is 1900000000000000000000000000.000000
Your weight on SATURN is 568800000000000000000000000.000000
Your weight on URANUS is 86860000000000000000000000.000000
Your weight on NEPTUNE is 102400000000000000000000000.000000

1.2 switch

扩大 switch 语句使用范围
5.0 之前,Java 中 switch 的值只能够是简单类型,比如 int、byte、short、char, 有了枚举类型之后,就可以使用对象了。

// 定义一周七天的枚举类型         
    public enum WeekDayEnum { Mon, Tue, Wed, Thu, Fri, Sat, Sun }
    // 读取当天的信息
    WeekDayEnum today = readToday();
// 根据日期来选择进行活动
    switch(today) {
        Mon: do something; break;
        Tue: do something; break;
        Wed: do something; break;
        Thu: do something; break;
        Fri: do something; break;
        Sat: play sports game; break;
        Sun: have a rest; break;
    }

参考:
[ 1 ].https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
[ 2 ].https://www.ibm.com/developerworks/cn/java/j-lo-enum/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值