Java 枚举类型

枚举类型


枚举类型是一种特殊的数据类型,它使得变量成为一组预定义的常量。变量必须等于预定义的值之一。常见的示例有罗盘方向与星期。

由于预定值为常量,所以枚举类型的字段名称为大写字母。
Java中,使用enum关键字定义枚举类型。

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

当需要表示固定常量集时,应当使用枚举类型。这包括自然枚举类型(例如太阳系中行星)与在编译时可知所有可能值的数据集(例如菜单中的选项,命令行标识等)。

编程中使用枚举类型

public class EnumLearn {

  Day day;

  public EnumLearn(Day day) {
    this.day = day;
  }

  public void tellItLikeItIs() {
    switch(day) {
      case MONDAY:
        System.out.println("Mondays are bad");
        break;
      case FRIDAY:
        System.out.println("Fridays are better");
        break;
      case SATURDAY: case SUNDAY:
        System.out.println("Weekends are best.");
        break;
      default:
        System.out.println("Midweek days are so-so.");
        break;
    }
  }

  public static void main(String[] args) {
    EnumLearn firstDay = new EnumLearn(Day.MONDAY);
    firstDay.tellItLikeItIs();
    EnumLearn thirdDay = new EnumLearn(Day.WEDNESDAY);
    thirdDay.tellItLikeItIs();
    EnumLearn fifthDay = new EnumLearn(Day.FRIDAY);
    fifthDay.tellItLikeItIs();
    EnumLearn sixthDay = new EnumLearn(Day.SATURDAY);
    sixthDay.tellItLikeItIs();
    EnumLearn seventhDay = new EnumLearn(Day.SUNDAY);
    seventhDay.tellItLikeItIs();
  }
}

enum声明定义了一个类(称为枚举类型)。枚举类的正文可以包含方法与其他字段。当创建一个枚举时,编译器会自动添加一些特定的方法。例如,静态方法values返回一个数组,此数组包含枚举中声明的所有成员,并且按序返回。此方法一般与for-each结构一起使用,用于迭代枚举类型中的所有值。

注意:所有的枚举隐式继承java.lang.Enum。因为类只能继承一个双亲,Java语言不支持多重继承,所以枚举不能继承任何类。

java要求枚举类型中,常量要首先声明,先于方法与域。而且,当存在方法与域时,枚举常量列表必需以分号结尾。

注意:枚举类型的构造器必须为包私有或私有。它会自动创建在枚举正文开始位置定义的常量。不能手动调用枚举的构造器。

import java.util.*;

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;
  private final double radius;
  Planet(double mass, double radius) {
    this.mass = mass;
    this.radius = radius;
  }

  private double mass() { return mass; }
  private double radius() { return radius; }
  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();
    Arrays.asList(Planet.values()).stream().forEach(p -> System.out.printf("%s %s%n", p, p.surfaceWeight(mass)));
  }

}

翻译源:Java Tutorial 枚举篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值