導航:首頁 > 編程語言 > java枚舉括弧

java枚舉括弧

發布時間:2023-06-02 10:55:38

java中的枚舉定義中的枚舉常量後面如果沒有括弧初始化,而枚舉常量又是對象實例,那從對象實例角度來說,

沒寫定值,就按順序從頭到尾遞增

㈡ java中如何將枚舉值用循環輸出

賦值必須給來枚舉類自增加成員屬性,再給用構造方法成員屬性賦值。
public class Test{
static public enum TestEnum{
E_A("aa"),
E_B("bb"),
E_C("cc");
public final String text;
TestEnum(String t){
text=t;
}
}
public static void main(String[] args){
for(TestEnum e : TestEnum.values())
System.out.println(e+" "+e.text);
}
}
======
E_A aa
E_B bb
E_C cc

㈢ 怎麼使用java中的枚舉方法

怎麼復解釋枚舉呢。枚制舉的定義就是一個有限值的集合。一個枚舉類型的變數它的值只可能是類型值中的一個。
所以Drection 是類型名,Drection drection 則是此類型的變數,變數的值應該是類型里邊所列的值中的一個,如果單寫個WEST跟本不知道它是什麼,所以要加類名限定即Drection.WEST. 於是,對一個枚舉變數賦值的樣子就像這樣。
if(drection==Drection.WEST) return true; String west="WEST"; drection.toString().equals(west) return true;

㈣ Java語言中的枚舉類型如何使用

Java語言中的枚舉類型的使用方法如下:

用法一:常量;

publicenumColor{
RED,GREEN,BLANK,YELLOW
}

用法二:switch;

enumSignal{
GREEN,YELLOW,RED
}
publicclassTrafficLight{
Signalcolor=Signal.RED;
publicvoidchange(){
switch(color){
caseRED:
color=Signal.GREEN;
break;
caseYELLOW:
color=Signal.RED;
break;
caseGREEN:
color=Signal.YELLOW;
break;
}
}
}

用法三:向枚舉中添加新方法;

publicenumColor{
RED("紅色",1),GREEN("綠色",2),BLANK("白色",3),YELLO("黃色",4);
//成員變數
privateStringname;
privateintindex;
//構造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//普通方法
publicstaticStringgetName(intindex){
for(Colorc:Color.values()){
if(c.getIndex()==index){
returnc.name;
}
}
returnnull;
}
//getset方法
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetIndex(){
returnindex;
}
publicvoidsetIndex(intindex){
this.index=index;
}
}

用法四:覆蓋枚舉的方法;

publicclassTest{
publicenumColor{
RED("紅色",1),GREEN("綠色",2),BLANK("白色",3),YELLO("黃色",4);
//成員變數
privateStringname;
privateintindex;
//構造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//覆蓋方法
@Override
publicStringtoString(){
returnthis.index+"_"+this.name;
}
}
publicstaticvoidmain(String[]args){
System.out.println(Color.RED.toString());
}
}

用法五:實現介面;

publicinterfaceBehaviour{
voidprint();
StringgetInfo();
}
{
RED("紅色",1),GREEN("綠色",2),BLANK("白色",3),YELLO("黃色",4);
//成員變數
privateStringname;
privateintindex;
//構造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//介面方法
@Override
publicStringgetInfo(){
returnthis.name;
}
//介面方法
@Override
publicvoidprint(){
System.out.println(this.index+":"+this.name);
}
}

用法六:使用介面組織枚舉。

publicinterfaceFood{
enumCoffeeimplementsFood{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enumDessertimplementsFood{
FRUIT,CAKE,GELATO
}
}

以上就是Java語言中枚舉類型的基本使用方法。

㈤ enum在java中是什麼意思

Enum 類型的介紹

枚舉類型(Enumerated Type) 很早就出現在編程語言中,它被用來將一組類似的值包含到一種類型當中。而這種枚舉類型的名稱則會被定義成獨一無二的類型描述符,在這一點上和常量的定義相似。不過相比較常量類型,枚舉類型可以為申明的變數提供更大的取值范圍。

舉個例子來說明一下,如果希望為彩虹描繪出七種顏色,你可以在 Java 程序中通過常量定義方式來實現。

清單 1. 常量定義

PublicstaticclassRainbowColor{

//紅橙黃綠青藍紫七種顏色的常量定義
publicstaticfinalintRED=0;
publicstaticfinalintORANGE=1;
publicstaticfinalintYELLOW=2;
publicstaticfinalintGREEN=3;
publicstaticfinalintCYAN=4;
publicstaticfinalintBLUE=5;
publicstaticfinalintPURPLE=6;
}

使用的時候,你可以在程序中直接引用這些常量。但是,這種方式還是存在著一些問題。

類型不安全

由於顏色常量的對應值是整數形,所以程序執行過程中很有可能給顏色變數傳入一個任意的整數值,導致出現錯誤。

沒有命名空間

由於顏色常量只是類的屬性,當你使用的時候不得不通過類來訪問。

一致性差

因為整形枚舉屬於編譯期常量,所以編譯過程完成後,所有客戶端和伺服器端引用的地方,會直接將整數值寫入。這樣,當你修改舊的枚舉整數值後或者增加新的枚舉值後,所有引用地方代碼都需要重新編譯,否則運行時刻就會出現錯誤。

類型無指意性

由於顏色枚舉值僅僅是一些無任何含義的整數值,如果在運行期調試時候,你就會發現日誌中有很多魔術數字,但除了程序員本身,其他人很難明白其奧秘。


如何定義 Enum 類型

為了改進 Java 語言在這方面的不足彌補缺陷,5.0 版本 SDK 發布時候,在語言層面上增加了枚舉類型。枚舉類型的定義也非常的簡單,用 enum 關鍵字加上名稱和大括弧包含起來的枚舉值體即可,例如上面提到的彩虹顏色就可以用新的 enum 方式來重新定義:

enumRainbowColor{RED,ORANGE,YELLOW,GREEN,CYAN,BLUE,PURPLE}

從上面的定義形式來看,似乎 Java 中的枚舉類型很簡單,但實際上 Java 語言規范賦予枚舉類型的功能非常的強大,它不僅是簡單地將整形數值轉換成對象,而是將枚舉類型定義轉變成一個完整功能的類定義。這種類型定義的擴展允許開發者給枚舉類型增加任何方法和屬性,也可以實現任意的介面。另外,Java 平台也為 Enum 類型提供了高質量的實現,比如默認實現 Comparable 和 Serializable 介面,讓開發者一般情況下不用關心這些細節。

回到本文的主題上來,引入枚舉類型到底能夠給我們開發帶來什麼樣好處呢?一個最直接的益處就是擴大 switch 語句使用范圍。5.0 之前,Java 中 switch 的值只能夠是簡單類型,比如 int、byte、short、char, 有了枚舉類型之後,就可以使用對象了。這樣一來,程序的控制選擇就變得更加的方便,看下面的例子:

清單 2. 定義 Enum 類型

//定義一周七天的枚舉類型
publicenumWeekDayEnum{Mon,Tue,Wed,Thu,Fri,Sat,Sun}
//讀取當天的信息
WeekDayEnumtoday=readToday();

//根據日期來選擇進行活動
switch(today){
Mon:dosomething;break;
Tue:dosomething;break;
Wed:dosomething;break;
Thu:dosomething;break;
Fri:dosomething;break;
Sat:playsportsgame;break;
Sun:havearest;break;
}


對於這些枚舉的日期,JVM 都會在運行期構造成出一個簡單的對象實例一一對應。這些對象都有唯一的 identity,類似整形數值一樣,switch 語句就根據此來進行執行跳轉。


如何定製 Enum 類型

除了以上這種最常見的枚舉定義形式外,如果需要給枚舉類型增加一些復雜功能,也可以通過類似 class 的定義來給枚舉進行定製。比如要給 enum 類型增加屬性,可以像下面這樣定義:

清單 3. 定製枚舉類型

//定義RSS(ReallySimpleSyndication)種子的枚舉類型
publicenumNewsRSSFeedEnum{
//雅虎頭條新聞RSS種子
YAHOO_TOP_STORIES("http://rss.news.yahoo.com/rss/topstories"),

//CBS頭條新聞RSS種子
CBS_TOP_STORIES("http://feeds.cbsnews.com/CBSNewsMain?format=xml"),

//洛杉磯時報頭條新聞RSS種子
LATIMES_TOP_STORIES("http://feeds.latimes.com/latimes/news?format=xml");

//枚舉對象的RSS地址的屬性
privateStringrss_url;

//枚舉對象構造函數
privateNewsRSSFeedEnum(Stringrss){
this.rss_url=rss;
}

//枚舉對象獲取RSS地址的方法
publicStringgetRssURL(){
returnthis.rss_url;
}
}

上面頭條新聞的枚舉類型增加了一個 RSS 地址的屬性 , 記錄頭條新聞的訪問地址。同時,需要外部傳入 RSS 訪問地址的值,因而需要定義一個構造函數來初始化此屬性。另外,還需要向外提供方法來讀取 RSS 地址。


如何避免錯誤使用 Enum

不過在使用 Enum 時候有幾個地方需要注意:

enum 類型不支持 public 和 protected 修飾符的構造方法,因此構造函數一定要是 private 或 friendly 的。也正因為如此,所以枚舉對象是無法在程序中通過直接調用其構造方法來初始化的。

定義 enum 類型時候,如果是簡單類型,那麼最後一個枚舉值後不用跟任何一個符號;但如果有定製方法,那麼最後一個枚舉值與後面代碼要用分號';'隔開,不能用逗號或空格。

由於 enum 類型的值實際上是通過運行期構造出對象來表示的,所以在 cluster 環境下,每個虛擬機都會構造出一個同義的枚舉對象。因而在做比較操作時候就需要注意,如果直接通過使用等號 ( 『 == 』 ) 操作符,這些看似一樣的枚舉值一定不相等,因為這不是同一個對象實例。

看下面的這個例子:

清單 4. 避免錯誤使用 Enum 示例

//定義一個一周七天的枚舉類型
packageexample.enumeration.codes;
publicenumWeekDayEnum{
Mon(1),Tue(2),Wed(3),Thu(4),Fri(5),Sat(6),Sun(7);
privateintindex;
WeekDayEnum(intidx){
this.index=idx;
}
publicintgetIndex(){
returnindex;
}
}
//客戶端程序,將一個枚舉值通過網路傳遞給伺服器端
packageexample.enumeration.codes;
importjava.io.IOException;
importjava.io.ObjectOutputStream;
importjava.io.OutputStream;
importjava.net.InetSocketAddress;
importjava.net.Socket;
importjava.net.UnknownHostException;
publicclassEnumerationClient{
publicstaticvoidmain(String...args)throwsUnknownHostException,IOException{
Socketsocket=newSocket();
//建立到伺服器端的連接
socket.connect(newInetSocketAddress("127.0.0.1",8999));
//從連接中得到輸出流
OutputStreamos=socket.getOutputStream();
ObjectOutputStreamoos=newObjectOutputStream(os);
//將星期五這個枚舉值傳遞給伺服器端
oos.writeObject(WeekDayEnum.Fri);
oos.close();
os.close();
socket.close();
}
}
//伺服器端程序,將從客戶端收到的枚舉值應用到邏輯處理中
packageexample.enumeration.codes;
importjava.io.*;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassEnumerationServer{
publicstaticvoidmain(String...args)throwsIOException,ClassNotFoundException{
ServerSocketserver=newServerSocket(8999);
//建立伺服器端的網路連接偵聽
Socketsocket=server.accept();
//從連接中獲取輸入流
InputStreamis=socket.getInputStream();
ObjectInputStreamois=newObjectInputStream(is);
//讀出客戶端傳遞來的枚舉值
WeekDayEnumday=(WeekDayEnum)ois.readObject();
//用值比較方式來對比枚舉對象
if(day==WeekDayEnum.Fri){
System.out.println("'s");
}elseif(day.equals(WeekDayEnum.Fri)){
System.out.println("'s");
}else{
System.out.println("'s");
}

//用switch方式來比較枚舉對象
switch(day){
caseMon:
System.out.println("DoMondaywork");
break;
caseTue:
System.out.println("DoTuesdaywork");
break;
caseWed:
System.out.println("DoWednesdaywork");
break;
caseThu:
System.out.println("DoThursdaywork");
break;
caseFri:
System.out.println("DoFridaywork");
break;
caseSat:
System.out.println("DoSaturdaywork");
break;
caseSun:
System.out.println("DoSundaywork");
break;
default:
System.out.println("Idon'tknowwhichisday");
break;
}

ois.close();
is.close();
socket.close();
}
}

列印結果如下:

client Friday enum value is same as server's
Do Friday work

通過程序執行結果,我們能夠發現在分布式條件下客戶端和服務端的虛擬機上都生成了一個枚舉對象,即使看起來一樣的 Fri 枚舉值,如果使用等號『 == 』進行比較的話會出現不等的情況。而 switch 語句則是通過 equal 方法來比較枚舉對象的值,因此當你的枚舉對象較復雜時候,你就需要小心 override 與比較相關的方法,防止出現值比較方面的錯誤。


Enum 相關工具

JDK5.0 中在增加 Enum 類的同時,也增加了兩個工具類 EnumSet 和 EnumMap,這兩個類都放在 java.util 包中。EnumSet 是一個針對枚舉類型的高性能的 Set 介面實現。EnumSet 中裝入的所有枚舉對象都必須是同一種類型,在其內部,是通過 bit-vector 來實現,也就是通過一個 long 型數。EnumSet 支持在枚舉類型的所有值的某個范圍中進行迭代。回到上面日期枚舉的例子上:

enumWeekDayEnum{Mon,Tue,Wed,Thu,Fri,Sat,Sun}

你能夠在每周七天日期中進行迭代,EnumSet 類提供一個靜態方法 range 讓迭代很容易完成:

for(WeekDayEnumday:EnumSet.range(WeekDayEnum.Mon,WeekDayEnum.Fri)){
System.out.println(day);
}

列印結果如下:

Mon
Tue
Wed
Thu
Fri

EnumSet 還提供了很多個類型安全的獲取子集的 of 方法,使你很容易取得子集:

EnumSet<WeekDayEnum>subset=EnumSet.of(WeekDayEnum.Mon,WeekDayEnum.Wed);
for(WeekDayEnumday:subset){
System.out.println(day);
}

列印結果如下:

Mon
Wed

與 EnumSet 類似,EnumMap 也是一個高性能的 Map 介面實現,用來管理使用枚舉類型作為 keys 的映射表,內部是通過數組方式來實現。EnumMap 將豐富的和安全的 Map 介面與數組快速訪問結合到一起,如果你希望要將一個枚舉類型映射到一個值,你應該使用 EnumMap。看下面的例子:

清單 5. EnumMap 示例

//定義一個EnumMap對象,映射表主鍵是日期枚舉類型,值是顏色枚舉類型
privatestaticMap<WeekDayEnum,RainbowColor>schema=
newEnumMap<WeekDayEnum,RainbowColor>(WeekDayEnum.class);

static{
//將一周的每一天與彩虹的某一種色彩映射起來
for(inti=0;i<WeekDayEnum.values().length;i++){
schema.put(WeekDayEnum.values()[i],RainbowColor.values()[i]);
}
}
System.out.println("Whatistheluckycolortoday?");
System.out.println("It's"+schema.get(WeekDayEnum.Sat));

當你詢問周六的幸運色彩時候,會得到藍色:

清單 6. 運行結果

What is the lucky color today?
It's BLUE


結束語

Enum 類型提出給 JAVA 編程帶了了極大的便利,讓程序的控制更加的容易,也不容易出現錯誤。所以在遇到需要控製程序流程時候,可以多想想是否可以利用 enum 來實現。

㈥ Java:這里的枚舉常量是如何定義的呢

枚舉(從JDK1.5開始有)
用於代表」實例已經固定「的類,而且定義時就必須在【第一行】創建初始化並列出來。
語法格式:
修飾符 enum 枚舉名{
//立即在第一行列出該枚舉的所有實例。

}

—— 修飾符 可以是 public | 省略 | abstract | final。 abstract與final必須出現其中一個。
—— 枚舉的構造器只能用private修飾。
—— 枚舉類的實例必須在第一行顯式的列出。

所有的枚舉都有一個values()方法,返回枚舉實例

switch(byte|short|char|int|String|枚舉)

●有了枚舉之後,它的實例已經創建出來了,只需要用它們就行了。
●枚舉可以有Field,方法,構造器(只能是private修飾),初始化塊,內部類。

列出枚舉值,並不是簡單的定義幾個枚舉值的變數名。
而是調用枚舉類的構造器來創建相應的實例。

定義枚舉的方法時要非常小心,

●包含抽象方法的枚舉類

●枚舉可以實現介面。

A。實現介面,並直接實現所有的抽象方法。
此時枚舉類不再是抽象枚舉了。

B。實現介面,但並不直接實現抽象方法。
此時枚舉類就只能是抽象枚舉類。

㈦ Java枚舉中的方法調用問題

定義一個簡單的枚舉代碼
public enum WorkDay{ Monday,Tuesday,Wednesday,Thurday,Friday;//定義時,枚舉值間有逗號隔開,最後用分號結束 }

廢話不多說,直接上main 方法,拿去玩玩吧:

Java代碼
public static void main(String []args) { /** * 枚舉類型是一種類型,既然是類型,就是跟int,char他們 一樣的, * 拿來定義變數,限制你對變數的賦值,就像 int a,你不能夠給a一個 string的值 * 同理,一個枚舉用來定義一個變數時,你只能夠賦枚舉值,其方式為 * "枚舉名.值" */ WorkDay myworkday=WorkDay.Wednesday; /** 補充點switch的基礎知識,switch語句括弧中支持byte \short \char \int類型, * jdk 1.5以後支持枚舉,所以,這里可以直接使用枚舉變數myworkday。 * 呵呵,在jdk1.7後將switch將支持string */ switch (myworkday) { /*枚舉重寫了toString()方法,所以枚舉變數的值不帶前綴 * myworkday 裡面的值應該是枚舉括弧裡面的那幾個 */ case Monday: System.out.println("you work day is Monday !"); break; case Tuesday: System.out.println("you work day is Tuesday!"); break; case Wednesday: System.out.println("you work day is Wednesday !"); break; case Thurday: System.out.println("you work day is Thurday !"); break; case Friday: System.out.println("you work day is Friday !"); break; } System.out.println("--------遍歷所有值----------"); //----使用values()方法返回一個數組 for(WorkDay day:WorkDay.values()) { System.out.println(day); } //-----既然是數組,就可以統計大小 System.out.println("WorkDay 裡面有 "+WorkDay.values().length+" 個元素"); //--------------------調用 ordinal()方法,返回枚舉值在枚舉中的索引,數組索引嘛,當然從0開始 System.out.println(WorkDay.Monday.ordinal()); System.out.println(WorkDay.Friday.ordinal()); //---默認實現java.lang.Comparable介面 ,測試測試 System.out.println(WorkDay.Monday.compareTo(WorkDay.Thurday));//結果應該是 -3 //---Monday的索引為0,Thurday為 3,0-3=-3, System.out.println(WorkDay.Friday.compareTo(WorkDay.Tuesday));//同理,結果應該為4-1=3, }

簡單吧,來點狠的,前面說了,枚舉有點像類,只是把class換成了enum,那麼它跟一般的類一樣可以添加屬性或方法。

帶方法與屬性的enum代碼
public enum WeAreJavaer{ chinese,java, spring, DB2, AIX; // 枚舉列表,必須寫在最前面,否則編譯出錯 private final static String location = "javaeye"; //定義一個屬性 public static WeAreJavaer getInfomation() { WeAreJavaer flag=null; if (location.equals("javaeye")) { flag=java; } else { flag= chinese; } return flag; } }

老規矩,直接上main()方法測試:

寫道
public static void main(String []ags) { System.out.println("---------------------測試調用枚舉中寫的方法-------------------------------"); System.out.println("直接調用枚舉裡面的方法: "+ WeAreJavaer.getInfomation()); }

3、來點更狠的。

你可以通過括弧來給enum賦值,這樣的話,你必須有帶參的構造方法,還需要有一屬性與方法,否則編譯時會出錯。

另外,你如果給enum裡面的元素賦值的話,要麼都賦,要麼都不賦,不要東賦一個,西賦一個。

如果不賦值則不能寫構造方法,如果你賦值了,而沒有構造方法,編譯還是通不過,廢話不多少,來,看:

可賦值的enum代碼
public enum People { xiaowang(20), xiaozhang(32),xiaoli(50), xiaogou(21); private final int age; People(int value) { //構造器只能是默認或者private, 從而保證構造函數只能在內部使用 this.age = value; } public int getAge() { return age; } }

好吧,啥也不說了,接下來的事,你懂地:

測試帶值enum代碼

public static void main(String[] args) {
for(People people:People.values()){
/*通過getValue()取得相關枚舉的值*/
System.out.println(people+" 的年齡 :"+people.getAge());
}
}

閱讀全文

與java枚舉括弧相關的資料

熱點內容
word使用教程下載 瀏覽:295
電腦文件平鋪圖片默認大小 瀏覽:115
文件查看設置信息失敗 瀏覽:668
編程如何編出烏鴉喝水的課文 瀏覽:20
國家反詐app報案助手怎麼使用 瀏覽:439
秘密文件丟失多少天 瀏覽:237
js中csstext 瀏覽:382
目標文件名過長復制 瀏覽:892
樂動力計步器老版本 瀏覽:933
壓縮文件鏈接怎麼編輯 瀏覽:808
如何鎖定PDF文件里的圖章 瀏覽:89
資料庫超時是什麼 瀏覽:649
文件怎麼改整列內容 瀏覽:764
360壓縮文件發郵件空白 瀏覽:813
上哪裡查自己大數據 瀏覽:907
編程語言怎麼學車 瀏覽:189
編程該怎麼學才能先找工作 瀏覽:524
文件刻制光碟多少錢 瀏覽:861
校園網的網路組成結構 瀏覽:862
u盤系統復制文件過大 瀏覽:843

友情鏈接