浏览以下内容前,请点击并阅读 声明
枚举类型是一种能让变量成为一个常量集合的特殊数据类型,该变量必须等于预先定义的常量集合中的一个。
枚举类型的定义
枚举类型的定义与类的定义类似,使用enum关键词声明,可以有方法和字段,创建枚举类时,编译器会自动给枚举类加上一些特殊的方法,如values方法能够返回枚举中包含的所有值所组成的数组,顺序和他们定义的顺序一致。
所有的枚举都隐含地继承java.lang.Enum类,因为java中类只能继承一个父类,所以枚举类型不能继承其他的类。
注意:枚举构造器的可视范围修饰词必须为private或者没有(程序包内可见),枚举中的常量是自动创建的,而不能自行调用枚举的构造器。
以下为一个关于太阳系行星信息枚举的定义:
//此处注意关键词为enum而不是class 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; } // 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();//此处可以直接用EARTH也可用Planet.EARTH for (Planet p : Planet.values()) System.out.printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass)); } }
以上代码输出为
$ 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