導航:首頁 > 編程語言 > java枚舉類型定義

java枚舉類型定義

發布時間:2022-08-31 15:30:04

『壹』 java枚舉類型

枚舉是一種特殊的數據類型,和類(class)是同一個級別,例如定義一個類Test,會有一個源文件Test.java,編譯會有一個位元組碼Test.class,那麼定義一個枚舉類型Myenum,編譯也會產生Myenum.class。

作用:存儲了一系列數據,保證數據的一個有效取值。
通常用到的地方是傳遞介面參數的時候,為了保證能傳遞一個合適的值,而不需要驗證這個值是否合法,那麼介面參數可以設置為枚舉類型,這里說的介面不是interface,而是只針對開發的不同層之間調用。

『貳』 java枚舉是什麼意思舉個最簡單的例子

枚舉是一種類型,用於定義變數,以限制變數的賦值 賦值時通過"枚舉名.值"來取得相關枚舉中的值
public enum Season {
winter, spring, summer, fall;
}
表示Season(季節)的值只能是枚舉裡面定義的 winter, spring, summer, fall(春夏秋冬);

『叄』 java中的枚舉類型怎麼定義

Enum作為Sun全新引進的一個關鍵字,看起來很象是特殊的class, 它也可以有自己的變數,可以定義自己的方法,可以實現一個或者多個介面。 當我們在聲明一個enum類型時,我們應該注意到enum類型有如下的一些特徵。

1.它不能有public的構造函數,這樣做可以保證客戶代碼沒有辦法新建一個enum的實例。

2.所有枚舉值都是public , static , final的。注意這一點只是針對於枚舉值,我們可以和在普通類裡面定義 變數一樣定義其它任何類型的非枚舉變數,這些變數可以用任何你想用的修飾符。

3.Enum默認實現了java.lang.Comparable介面。

4.Enum覆載了了toString方法,因此我們如果調用Color.Blue.toString()默認返回字元串」Blue」.

5.Enum提供了一個valueOf方法,這個方法和toString方法是相對應的。調用valueOf(「Blue」)將返回Color.Blue.因此我們在自己重寫toString方法的時候就要注意到這一點,一把來說應該相對應地重寫valueOf方法。

6.Enum還提供了values方法,這個方法使你能夠方便的遍歷所有的枚舉值。

7.Enum還有一個oridinal的方法,這個方法返回枚舉值在枚舉類種的順序,這個順序根據枚舉值聲明的順序而定,這里Color.Red.ordinal()返回0。

了解了這些基本特性,我們來看看如何使用它們。

1.遍歷所有有枚舉值. 知道了有values方法,我們可以輕車熟路地用ForEach循環來遍歷了枚舉值了。

for (Color c: Color.values())
System.out.println(「find value:」 + c);

2.在enum中定義方法和變數,比如我們可以為Color增加一個方法隨機返回一個顏色。

public enum Color {
Red,
Green,
Blue;

/*
*定義一個變數表示枚舉值的數目。
*(我有點奇怪為什麼sun沒有給enum直接提供一個size方法).
*/
private static int number = Color.values().length ;

/**
* 隨機返回一個枚舉值
@return a random enum value.
*/
public static Color getRandomColor(){
long random = System.currentTimeMillis() % number;
switch ((int) random){
case 0:
return Color.Red;
case 1:
return Color.Green;
case 2:
return Color.Blue;
default : return Color.Red;
}
}
}

可以看出這在枚舉類型里定義變數和方法和在普通類裡面定義方法和變數沒有什麼區別。唯一要注意的只是變數和方法定義必須放在所有枚舉值定義的後面,否則編譯器會給出一個錯誤。

3.覆載(Override)toString, valueOf方法

前面我們已經知道enum提供了toString,valueOf等方法,很多時候我們都需要覆載默認的toString方法,那麼對於enum我們怎麼做呢。其實這和覆載一個普通class的toString方法沒有什麼區別。

….
public String toString(){
switch (this){
case Red:
return "Color.Red";
case Green:
return "Color.Green";
case Blue:
return "Color.Blue";
default:
return "Unknow Color";
}
}
….

這時我們可以看到,此時再用前面的遍歷代碼列印出來的是

Color.Red
Color.Green
Color.Blue

而不是

Red
Green
Blue.

可以看到toString確實是被覆載了。一般來說在覆載toString的時候我們同時也應該覆載valueOf方法,以保持它們相互的一致性。

4.使用構造函數

雖然enum不可以有public的構造函數,但是我們還是可以定義private的構造函數,在enum內部使用。還是用Color這個例子。

public enum Color {
Red("This is Red"),
Green("This is Green"),
Blue("This is Blue");

private String desc;

Color(String desc){
this.desc = desc;
}

public String getDesc(){
return this.desc;
}

}

這里我們為每一個顏色提供了一個說明信息, 然後定義了一個構造函數接受這個說明信息。

要注意這里構造函數不能為public或者protected, 從而保證構造函數只能在內部使用,客戶代碼不能new一個枚舉值的實例出來。這也是完全符合情理的,因為我們知道枚舉值是public static final的常量而已。

5.實現特定的介面

我們已經知道enum可以定義變數和方法,它要實現一個介面也和普通class實現一個介面一樣,這里就不作示例了。

6.定義枚舉值自己的方法。

前面我們看到可以為enum定義一些方法,其實我們甚至可以為每一個枚舉值定義方法。這樣,我們前面覆載 toString的例子可以被改寫成這樣。

public enum Color {
Red {
public String toString(){
return "Color.Red";
}
},
Green {
public String toString(){
return "Color.Green";
}
},
Blue{
public String toString(){
return "Color.Blue";
}
};
}

從邏輯上來說這樣比原先提供一個「全局「的toString方法要清晰一些。

總的來說,enum作為一個全新定義的類型,是希望能夠幫助程序員寫出的代碼更加簡單易懂,個

人覺得一般也不需要過多的使用enum的一些高級特性,否則就和簡單易懂的初衷想違背了。

『肆』 Java中的枚舉怎麼定義

請參考圖片的程序

『伍』 java怎麼定義枚舉

在Java中,枚舉(enum)與類(class)、介面(interface)屬於同一個級別。


使用枚舉的Java程序:

publicclassMain{
publicstaticvoidmain(String[]args){
Weekw=Week.Monday;
System.out.println(w);
}
}

//定義枚舉
enumWeek{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}


運行測試:

Monday

『陸』 Java 枚舉類型必須定義在靜態類中

應該是enum類型本質是靜態類,普通內部類里當然不能定義靜態類。靜態類是編譯期確定的,普通內部類是運行時確定的,所以靜態內部類的普通成員父類要到運行期才能確定,就不可能編譯確定該普通內部類的靜態內部類,就是說,該靜態內部類的上層父類當中不能有一層是普通內部類,編譯器編譯時中間就斷鏈了。即在內部類中只能靜態包含靜態,不能普通包含靜態。希望你能理解。

『柒』 java中的枚舉應該怎樣深刻理解

枚舉是一種規范它規范了參數的形式,這樣就可以不用考慮類型的不匹配並且顯式的替代了int型參數可能帶來的模糊概念 枚舉像一個類,又像一個數組。

Enum作為Sun全新引進的一個關鍵字,看起來很象是特殊的class, 它也可以有自己的變數,可以定義自己的方法,可以實現一個或者多個介面。 當我們在聲明一個enum類型時,我們應該注意到enum類型有如下的一些特徵。

1.它不能有public的構造函數,這樣做可以保證客戶代碼沒有辦法新建一個enum的實例。

2.所有枚舉值都是public , static , final的。注意這一點只是針對於枚舉值,我們可以和在普通類裡面定義 變數一樣定義其它任何類型的非枚舉變數,這些變數可以用任何你想用的修飾符。

3.Enum默認實現了java.lang.Comparable介面。

4.Enum覆載了了toString方法,因此我們如果調用Color.Blue.toString()默認返回字元串」Blue」.

5.Enum提供了一個valueOf方法,這個方法和toString方法是相對應的。調用valueOf(「Blue」)將返回Color.Blue.因此我們在自己重寫toString方法的時候就要注意到這一點,一把來說應該相對應地重寫valueOf方法。

6.Enum還提供了values方法,這個方法使你能夠方便的遍歷所有的枚舉值。

7.Enum還有一個oridinal的方法,這個方法返回枚舉值在枚舉類種的順序,這個順序根據枚舉值聲明的順序而定,這里Color.Red.ordinal()返回0。

『捌』 java枚舉類怎麼寫

枚舉(enum)類型是Java 5新增的特性,它是一種新的類型,允許用常量來表示特定的數據片斷,而且全部都以類型安全的形式來表示。

1、常量的使用
在JDK1.5之前,我們定義常量都是:public static fianl....。現在好了,有了枚舉,可以把相關的常量分組到一個枚舉類型里,而且枚舉提供了比常量更多的方法。
1234567

package com; public enum Color { RED, GREEN, BLANK, YELLOW }

使用


package com; public class B { public static void main(String[] args) { System.out.println( isRed( Color.BLANK ) ) ; //結果: false System.out.println( isRed( Color.RED ) ) ; //結果: true } static boolean isRed( Color color ){ if ( Color.RED.equals( color )) { return true ; } return false ; } }

或者 switch 的使用
22232425

package com; public class B { public static void main(String[] args) { showColor( Color.RED ); } static void showColor(Color color){ switch ( color ) { case BLANK: System.out.println( color ); break; case RED : System.out.println( color ); break; default: System.out.println( color ); break; } }}

2、自定義函數

package com; public enum Color { RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4); private String name ; private int index ; private Color( String name , int index ){ this.name = name ; this.index = index ; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
使用
package com; public class B { public static void main(String[] args) { //輸出某一枚舉的值 System.out.println( Color.RED.getName() ); System.out.println( Color.RED.getIndex() ); //遍歷所有的枚舉 for( Color color : Color.values()){ System.out.println( color + " name: " + color.getName() + " index: " + color.getIndex() ); } } }
結果
紅色
1
RED name: 紅色 index: 1
GREEN name: 綠色 index: 2
BLANK name: 白色 index: 3
YELLO name: 黃色 index: 4

總結:
1、枚舉的本質是類,在沒有枚舉之前,仍然可以按照java最基本的編程手段來解決需要用到枚舉的地方。枚舉屏蔽了枚舉值的類型信息,不像在用public static final定義變數必須指定類型。枚舉是用來構建常量數據結構的模板,這個模板可擴展。枚舉的使用增強了程序的健壯性,比如在引用一個不存在的枚舉值的時候,編譯器會報錯。枚舉的更多用法還需要在開發中去研究創造,Java5、Java6增加了不少新的特性,技術在升級,對程序員來說就要學習,如果你熱愛java的話。否則別人用到新特性的代碼你看不懂,那才叫郁悶。
2、枚舉在Java家族中只佔了很小的一塊比重,所以我在項目中用枚舉的地方不是很多,畢竟,一個項目是很多人開發維護的,用一個陌生的東西,會給其他的同事造成閱讀困難。所以常量大都是用public static final 來定義的。

『玖』 JAVA枚舉類定義的語法格式不明白

枚舉的構造方法必須是私有的 所以不可以new對象

要想有對象必須在他的內部實例化,用你這個例子來說吧
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE};
就相當於new出N個Size對象 名分別為SMALL .....而且是靜態的(不要問為什麼,這是enum的特點)
而這個枚舉類(看成特殊的類)的構造方法 需要穿進去一個String 所以new Size時需要傳參數
在哪傳呢? 就是這:SMALL("S")

所以 你說「但是Size.SMALL 既不是Size類的屬性也不是方法 我知道class和enum 是兩個類

其實 SMALL 是Size的靜態屬性 類型是 Size
明白了吧

『拾』 java 什麼叫枚舉型

Enum作為Sun全新引進的一個關鍵字,看起來很象是特殊的class, 它也可以有自己的變數,可以定義自己的方法,可以實現一個或者多個介面。當我們在聲明一個enum類型時,我們應該注意到enum類型有如下的一些特徵。

1.它不能有public的構造函數,這樣做可以保證客戶代碼沒有辦法新建一個enum的實例。

2.所有枚舉值都是public , static , final的。注意這一點只是針對於枚舉值,我們可以和在普通類裡面定義變數一樣定義其它任何類型的非枚舉變數,這些變數可以用任何你想用的修飾符。
3.Enum默認實現了java.lang.Comparable介面。

4.Enum覆載了了toString方法,因此我們如果調用Color.Blue.toString()默認返回字元串」Blue」.

5.Enum提供了一個valueOf方法,這個方法和toString方法是相對應的。調用valueOf(「Blue」)將返回Color.Blue.因此我們在自己重寫toString方法的時候就要注意到這一點,一把來說應該相對應地重寫valueOf方法。
6.Enum還提供了values方法,這個方法使你能夠方便的遍歷所有的枚舉值。

7.Enum還有一個oridinal的方法,這個方法返回枚舉值在枚舉類種的順序,這個順序根據枚舉值聲明的順序而定,這里Color.Red.ordinal()返回0。

1.遍歷所有有枚舉值. 知道了有values方法,我們可以輕車熟路地用ForEach循環來遍歷了枚舉值了。
for (Color c: Color.values())
System.out.println(「find value:」 + c);

2.在enum中定義方法和變數,比如我們可以為Color增加一個方法隨機返回一個顏色。
public enum Color {
Red,
Green,
Blue;

private static int number = Color.values().length ;

public static Color getRandomColor(){
long random = System.currentTimeMillis() % number;
switch ((int) random){
case 0:
return Color.Red;
case 1:
return Color.Green;
case 2:
return Color.Blue;
default : return Color.Red;
}
}
}

可以看出這在枚舉類型里定義變數和方法和在普通類裡面定義方法和變數沒有什麼區別。唯一要注意的只是變數和方法定義必須放在所有枚舉值定義的後面,否則編譯器會給出一個錯誤。

3.覆載(Override)toString, valueOf方法。
前面我們已經知道enum提供了toString,valueOf等方法,很多時候我們都需要覆載默認的toString方法,那麼對於enum我們怎麼做呢。其實這和覆載一個普通class的toString方法沒有什麼區別。
….
public String toString(){
switch (this){
case Red:
return "Color.Red";
case Green:
return "Color.Green";
case Blue:
return "Color.Blue";
default:
return "Unknow Color";

}
}
….

這時我們可以看到,此時再用前面的遍歷代碼列印出來的是
Color.Red
Color.Green
Color.Blue
而不是
Red
Green
Blue.
可以看到toString確實是被覆載了。一般來說在覆載toString的時候我們同時也應該覆載valueOf方法,以保持它們相互的一致性。

4.使用構造函數。
雖然enum不可以有public的構造函數,但是我們還是可以定義private的構造函數,在enum內部使用。還是用Color這個例子。

public enum Color {
Red("This is Red"),
Green("This is Green"),
Blue("This is Blue");

private String desc;

Color(String desc){
this.desc = desc;
}

public String getDesc(){
return this.desc;
}

}

這里我們為每一個顏色提供了一個說明信息
public enum Color {
Red {
public String toString(){
return "Color.Red";
}
},
Green {
public String toString(){
return "Color.Green";
}
},
Blue{
public String toString(){
return "Color.Blue";
}

};
}

, 然後定義了一個構造函數接受這個說明信息。
要注意這里構造函數不能為public或者protected, 從而保證構造函數只能在內部使用,客戶代碼不能new一個枚舉值的實例出來。這也是完全符合情理的,因為我們知道枚舉值是public static final的常量而已。

5.實現特定的介面
我們已經知道enum可以定義變數和方法,它要實現一個介面也和普通class實現一個介面一樣,這里就不作示例了。

6.定義枚舉值自己的方法。
前面我們看到可以為enum定義一些方法,其實我們甚至可以為每一個枚舉值定義方法。這樣,我們前面覆載 toString的例子可以被改寫成這樣。
從邏輯上來說這樣比原先提供一個「全局「的toString方法要清晰一些。

總的來說,enum作為一個全新定義的類型,是希望能夠幫助程序員寫出的代碼更加簡單易懂,個人覺得一般也不需要過多的使用enum的一些高級特性,否則就和簡單易懂的初衷想違背了。

閱讀全文

與java枚舉類型定義相關的資料

熱點內容
下人電影完整版下載 瀏覽:589
雲伺服器下載服務 瀏覽:241
pdf如何插入頁碼 瀏覽:637
ps選擇命令大全 瀏覽:826
qq聊天記錄恢復文件夾 瀏覽:646
電腦公共盤加密碼 瀏覽:459
韓國電影兩個字 瀏覽:971
鴻蒙系統怎麼給App加速 瀏覽:190
女主叫男主三叔姓戰 瀏覽:377
驍騎校全部小說順序 瀏覽:394
如何將iphone手機照片轉到安卓手機 瀏覽:31
從本地郵件到伺服器是什麼協議 瀏覽:226
外國片公交車男女主 瀏覽:234
瓦房店新瑪特有電影院嗎 瀏覽:933
免費觀看網頁版 瀏覽:622
葉子楣徐錦江演的電影 瀏覽:40
一級建造師法規pdf 瀏覽:496
phpshiro 瀏覽:161
無憂雲伺服器放行 瀏覽:634
免費最新大片觀看網址 瀏覽:250