枚舉類型
枚舉類型是一種特殊的數據類型,它使變量成為一組預定義的常量,變量必須等于為其預定義的值之一,常見示例包括羅盤方向(NORTH、SOUTH、EAST和WEST的值)和星期。
因為它們是常量,所以枚舉類型字段的名稱是大寫字母。
在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編程語言枚舉類型比其他語言中的對應類型強大得多,枚舉聲明定義了一個類(稱為枚舉類型),枚舉類體可以包括方法和其他字段,編譯器在創建枚舉時會自動添加一些特殊方法。例如,它們有一個靜態值方法,該方法返回一個數組,該數組按照聲明的順序包含枚舉的所有值,此方法通常與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) { if (args.length != 1) { System.err.println("Usage: java Planet"); 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 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上一篇:Lambda表達式 下一篇:注解
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72473.html
包 本課程解釋了如何將類和接口捆綁到包中,如何使用包中的類,以及如何安排文件系統以便編譯器可以找到源文件。 創建和使用包 為了使類型更易于查找和使用,避免命名沖突和控制訪問,程序員將相關類型的組捆綁到包中。 定義:包是一組提供訪問保護和名稱空間管理的相關類型,請注意,類型引用類、接口、枚舉和注解類型,枚舉和注解類型分別是特殊的類和接口,因此在本課中通常將類型簡稱為類和接口。 作為Java平臺一部...
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續版本中引入的改進。 Java教程是希望使用Java編程語言創建應用程序的程序員的實用指南,其中包括數百個完整的工作示例和數十個課程,相關課程組被組織成教程。 覆蓋基礎知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術和安裝Java開發軟件并使用...
摘要:中語句用來判斷一個變量與一系列值中某個值是否相等,每個值稱為一個分支。使用包裝類型使用枚舉類型以下為官網的介紹文檔。里面必須跟,不然程序會一個個執行下去,直到最后一個的或者出現。 有粉絲建議可以偶爾推送一些 Java 方面的基礎知識,一方面可以幫助一初學者,也可以兼顧中高級的開發者。 那么今天就講一下 Java 中的 switch case 語句吧,有忘記的同學正好可以溫習一下。 Ja...
管理源文件和類文件 Java平臺的許多實現依賴于分層文件系統來管理源文件和類文件,盡管Java語言規范不要求這樣做,策略如下。 將類、接口、枚舉或注解類型的源代碼放在文本文件中,該文件的名稱是類型的簡單名稱,其擴展名為.java,例如: //in the Rectangle.java file package graphics; public class Rectangle { ... ...
摘要:動態代理個經紀人如何代理個明星掘金在代理模式女朋友這么漂亮,你缺經紀人嗎中我們用寶強的例子介紹了靜態代理模式的概念。掘金使用從頭創建一個,這種方法比較簡單。 動態代理:1 個經紀人如何代理 N 個明星 - Android - 掘金在 代理模式:女朋友這么漂亮,你缺經紀人嗎? 中我們用寶強的例子介紹了靜態代理模式的概念。 本來我的目的是通過大家耳熟能詳的例子來加深理解,但是有些網友指責...
閱讀 919·2021-11-25 09:43
閱讀 1290·2021-11-17 09:33
閱讀 3008·2019-08-30 15:44
閱讀 3309·2019-08-29 17:16
閱讀 476·2019-08-28 18:20
閱讀 1632·2019-08-26 13:54
閱讀 552·2019-08-26 12:14
閱讀 2172·2019-08-26 12:14