Java eNum 初學者指南 – 為什麼以及為什麼要使用 Enum? Java 枚舉示例
已發表: 2019-04-23 枚舉是constants
列表,如不可更改的變量。 你聽說過Final keyword
嗎? 就像那樣。
當您需要一個代表某種數字或文本數據的預定義值列表時,您應該使用枚舉。 例如,在國際象棋遊戲中,您可以將不同類型的棋子表示為枚舉:
1 2 3 4 5 6 7 8 |
enum ChessPiece { PAWN , ROOK , KNIGHT , BISHOP , QUEEN , KING ; } |
當變量(尤其是方法參數)只能從一小組可能值中取出一個時,您應該始終使用枚舉。 例如類型常量(合同狀態:“永久”、“臨時”、“學徒”)或標誌(“立即執行”、“延遲執行”)。
如果您使用枚舉而不是整數(或字符串代碼),您會增加編譯時檢查並避免因傳遞無效常量而導致的錯誤,並記錄哪些值是合法使用的。
Java示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public enum Company { EBAY , PAYPAL , GOOGLE , YAHOO , ATT } Company cName ; public CrunchifyEnumExample ( Company cName ) { this . cName = cName ; } public void companyDetails ( ) { switch ( cName ) { case EBAY : System . out . println ( "EBAY: Biggest Market Place in the World." ) ; break ; case PAYPAL : System . out . println ( "PAYPAL: Simplest way to manage Money." ) ; break ; case GOOGLE : case YAHOO : System . out . println ( "YAHOO: 1st Web 2.0 Company." ) ; break ; default : System . out . println ( "DEFAULT: Google - biggest search giant.. ATT - my carrier provider.." ) ; break ; } } public static void main ( String [ ] args ) { CrunchifyEnumExample ebay = new CrunchifyEnumExample ( Company . EBAY ) ; ebay . companyDetails ( ) ; CrunchifyEnumExample paypal = new CrunchifyEnumExample ( Company . PAYPAL ) ; paypal . companyDetails ( ) ; CrunchifyEnumExample google = new CrunchifyEnumExample ( Company . GOOGLE ) ; google . companyDetails ( ) ; CrunchifyEnumExample yahoo = new CrunchifyEnumExample ( Company . YAHOO ) ; yahoo . companyDetails ( ) ; CrunchifyEnumExample att = new CrunchifyEnumExample ( Company . ATT ) ; att . companyDetails ( ) ; } } |
輸出:
1 2 3 4 5 6 7 |
EBAY : Biggest Market Place in the World . PAYPAL : Simplest way to manage Money . YAHOO : 1st Web 2.0 Company . YAHOO : 1st Web 2.0 Company . DEFAULT : Google - biggest search giant . . ATT - my carrier provider . . Process finished with exit code 0 |
Java Enum 的一些非常重要的點:
第 1 點
所有枚舉都隱式擴展java.lang.Enum
。 由於 Java 不支持多重繼承,因此枚舉不能擴展其他任何東西。
第 2 點
Enum in Java are type-safe:
枚舉有自己的命名空間。 這意味著您的枚舉將在下面的示例中具有例如“公司”的類型,並且除了枚舉常量中指定的值之外,您不能分配任何值。
1 2 3 4 5 6 |
public enum Company { EBAY , PAYPAL , GOOGLE , YAHOO , ATT } Company cName = Company . EBAY ; cName = 1 ; // Compilation Error |

第 3 點
您可以在創建時指定枚舉常量的值。 MyEnum.values()
返回一個 MyEnum 值的數組。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public enum Company { EBAY ( 30 ) , PAYPAL ( 10 ) , GOOGLE ( 15 ) , YAHOO ( 20 ) , ATT ( 25 ) ; private int value ; private Company ( int value ) { this . value = value ; } } public static void main ( String [ ] args ) { for ( Company cName : Company . values ( ) ) { System . out . println ( "Company Value: " + cName . value + " - Company Name: " + cName ) ; } } } |
輸出:
1 2 3 4 5 |
Company Value : 30 - Company Name : EBAY Company Value : 10 - Company Name : PAYPAL Company Value : 15 - Company Name : GOOGLE Company Value : 20 - Company Name : YAHOO Company Value : 25 - Company Name : ATT |
第 4 點
枚舉常量是隱式靜態和最終的,一旦創建就不能更改。
第 5 點
可以使用以下方法安全地比較枚舉:
- Switch-Case 語句
- == 運算符
- .equals() 方法請遵循完整的教程。
1 2 3 4 |
Company eBay = Company . EBAY ; if ( eBay == Company . EBAY ) { log . info ( "enum in java can be compared using ==" ) ; } |
第 6 點
您不能在 Java 中使用 new 運算符創建枚舉實例,因為 Java 中 Enum 的構造函數只能是私有的,而 Enums 常量只能在 Enums 本身內部創建。
第 7 點
Java 中的 Enum 實例是在代碼中首次調用或引用任何 Enum 常量時創建的。
第 8 點
枚舉指定分配給類型的常量值列表。
第 9 點
枚舉可以在類外部或內部聲明,但不能在方法中聲明。
第 10 點
在類之外聲明的枚舉不得標記為 static、final、abstract、protected 或 private
第 11 點
枚舉可以包含構造函數、方法、變量和常量類主體。
第 12 點
枚舉常量可以使用語法 BIG(8) 向枚舉構造函數發送參數,其中 int 字面量 8 被傳遞給枚舉構造函數。
第 13 點
枚舉構造函數可以有參數,並且可以重載。
第 14 點
永遠不能在代碼中直接調用枚舉構造函數。 它們總是在枚舉初始化時自動調用。
第 15 點
枚舉聲明末尾的分號是可選的。
這些是合法的:
- 枚舉 Foo { 一、二、三}
- 枚舉 Foo {一、二、三};
另一個簡單的 Java eNUM 示例:
枚舉是常量列表。 當您需要一個代表某種數字或文本數據的預定義值列表時,您應該使用枚舉。
當變量(尤其是方法參數)只能從一小組可能值中取出一個時,您應該始終使用枚舉。 例如類型常量(合同狀態:“永久”、“臨時”、“學徒”)或標誌(“立即執行”、“延遲執行”)。
如果您使用枚舉而不是整數(或字符串代碼),您會增加編譯時檢查並避免因傳遞無效常量而導致的錯誤,並記錄哪些值是合法使用的。
在這兩者之間,過度使用枚舉可能意味著你的方法做得太多(最好有幾個單獨的方法,而不是一個方法需要幾個標誌來修改它的作用),但是如果你必須使用標誌或類型代碼,枚舉是要走的路。
這是一個非常簡單的 Java eNum 示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public enum CrunchifyEnumCompany { GOOGLE ( "G" ) , YAHOO ( "Y" ) , EBAY ( "E" ) , PAYPAL ( "P" ) ; private String companyLetter ; private CrunchifyEnumCompany ( String s ) { companyLetter = s ; } public String getCompanyLetter ( ) { return companyLetter ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com . crunchify . tutorials ; import com . crunchify . tutorials . CrunchifyEnumCompany ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public static void main ( String [ ] args ) { System . out . println ( "Get enum value for Comapny 'eBay': " + CrunchifyEnumCompany . EBAY . getCompanyLetter ( ) ) ; } } |
輸出:
1 |
Get enum value for Comapny 'eBay' : Value : E |