枚舉類型是一種能讓變量成為一個常量集合的特殊數據類型,該變量必須等於預先定義的常量集合中的一個。
枚舉類型的定義
枚舉類型的定義與類的定義類似,使用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