java 枚舉類型(翻譯自Java Tutorials)

來源:互聯網
上載者:User

原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/03/2800427.html

英文出自 http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

枚舉類型,它是欄位包含固定數量的常量的類型。常見的例子,羅盤的方向包括東西南北,還有星期的天。

因為他們是常量,所有枚舉類型的欄位的名字一般是大寫字母。

java程式設計語言,聲明一個枚舉類型使用enum關鍵字。例如,你要指定一整個星期的天的枚舉類型是:

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

應該在需要使用固定組常量的任何時候使用枚舉類型。這包括自然枚舉類型,例如銀河系的行星,這些你可以在編譯時間知道任何可能值。例如,菜單選擇,命令列標誌等。

這裡有一些介紹如何使用Day枚舉型別宣告的代碼,如下:

public class EnumTest {    Day day;        public EnumTest(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) {        EnumTest firstDay = new EnumTest(Day.MONDAY);        firstDay.tellItLikeItIs();        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);        thirdDay.tellItLikeItIs();        EnumTest fifthDay = new EnumTest(Day.FRIDAY);        fifthDay.tellItLikeItIs();        EnumTest sixthDay = new EnumTest(Day.SATURDAY);        sixthDay.tellItLikeItIs();        EnumTest seventhDay = new EnumTest(Day.SUNDAY);        seventhDay.tellItLikeItIs();    }}

 

輸出是:

Mondays are bad.Midweek days are so-so.Fridays are better.Weekends are best.Weekends are best.

 

java程式設計語言枚舉類型比其他程式設計語言更加強大。enum聲明,定義了類(稱為enum類型)。枚舉類體,可以包含方法和其他欄位。編譯器為enum自動添加特殊的方法。例如,有一個靜態values方法,返回一個按照聲明順序排列的enum值數組。這個方法通常結合for-each結構,遍曆enum類型的所有值。例如,下面Planet類裡的代碼,示範了遍曆銀河系的所有行星。

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

注意:所有enum類隱式繼承java.lang.Enum。由於java不支援多繼承,所有enum也不能繼承其他類。

下面的例子中,Planet是一個枚舉類型,代表銀河系裡的所有行星。他們是恒定的品質和半徑屬性定義。

每個枚舉常量都有品質和半徑參數的聲明。這些值,通過構造方法,在常量初始化時傳遞進來。java要求常量首先定義,其次才是欄位和方法。所以,在欄位和方法之前,enum常量列表必須以分號(;)結束。

注意:enum類型的構造方法必須是包內私人或者是private訪問。它自動建立在enum體內的開始建立聲明的常量,不允許直接調用enum的構造方法。

對於它的屬性和構造方法,行星上有方法,使您可以檢索你在每個行星的表面引力和重量。下面是一個樣本程式,根據你在地球的體重(任何單位),計算,並列印你在所有的行星的體重(在同一個單位):

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));    }}

如果在命令列運行Planet.class,參數是175,輸出是:

$ java Planet 175Your weight on MERCURY is 66.107583Your weight on VENUS is 158.374842Your weight on EARTH is 175.000000Your weight on MARS is 66.279007Your weight on JUPITER is 442.847567Your weight on SATURN is 186.552719Your weight on URANUS is 158.397260Your weight on NEPTUNE is 199.207413
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.