㈠ 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語言中枚舉類型的基本使用方法。
㈡ 在java中,怎樣動態為一個enum添加元素,是不是設計有問題
因為你的localValue方式是枚舉裡面特化的陸孝匿名類方法,就算其訪問類型是public,但由於其在一個匿名類中(匿名類只有當前早穗稿上下文才能訪問其方法,也族銀就是默認private訪問),所以外部無法訪問,需要公開方法的請在enum中使用abstract聲明。
㈢ 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。
了解了這些基本特性,我們來看看如何使用它們。
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或者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中的枚舉是什麼意思
Java的Enumeration(枚舉,注釋②)便是具有這些限制的一個反復器的例子。除下面這些外,不可再用它做其他任何事情:
(1)
用一個名為elements()的方法要求集合為我們提供一個Enumeration。我們首次調用它的nextElement()時,這個Enumeration會返回序列中的第一個元素。
(2)
用nextElement()獲得下一個對象。
(3)
用hasMoreElements()檢查序列中是否還有更多的對象。
②:「反復器」這個詞在C++和OOP的其他地方是經常出現的,所以很難確定為什麼Java的開發者採用了這樣一個奇怪的名字。Java
1.2的集合庫修正了這個問題以及其他許多問題。
㈥ 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寫一個枚舉類程序
packagecom.school.stereotype;
/**
*活動枚舉類型
*@authorQiXuan.Chen
*/
publicenumEventStatus{
/**
*未發布。
*/
DRAFT("DRAFT","未發布"),
/**
*已發布。
*/
PUBLISHED("PUBLISHED","已發布");
/**
*活動狀態的值。
*/
privateStringvalue;
/**
*活動狀態的中文描述。
*/
privateStringtext;
/**
*@paramstatus活動狀態的值
*@paramdesc活動狀態的中文描述
*/
privateEventStatus(Stringstatus,Stringdesc){
value=status;
text=desc;
}
/**
*@return當前枚舉對象的值。
*/
publicStringgetValue(){
returnvalue;
}
/**
*@return當前狀態的中文描述。
*/
publicStringgetText(){
returntext;
}
/**
*根據活動狀態的值獲取枚舉對象。
*
*@paramstatus活動狀態的值
*@return枚舉對象
*/
(Stringstatus){
EventStatus[]allStatus=EventStatus.values();
for(EventStatusws:allStatus){
if(ws.getValue().equalsIgnoreCase(status)){
returnws;
}
}
("status值非法,沒有符合課程狀態的枚舉對象");
}
}
㈧ java的enum,能不能動態增加元素
不能, 講道理 普通的class類也不行啊;
莫非可以自己修改位元組碼...
㈨ java,求高手講解一下一個枚舉的例子
結果:Mr. John Doe
轉的。枚舉是一個特殊的類。
枚舉類型是JDK5.0的新特徵 。Sun引進了一個全新的關鍵字enum來定義一個枚舉類 。下面就是一個典型枚舉類型的定義:
Java代碼:
public enum Color{
RED,BLUE,BLACK,YELLOW,GREEN
}
顯然,enum很像特殊的class,實際上enum聲明定義的類型就是一個類 。 而這些類都是類庫中Enum類的子類(java.lang.Enum) 。它們繼承了這個Enum中的許多有用的方法 。我們對代碼編譯之後發現,編譯器將enum類型單獨編譯成了一個位元組碼文件:Color.class 。
Color位元組碼代碼
final enum hr.test.Color {
// 所有的枚舉值都是類靜態常量
public static final enum hr.test.Color RED;
public static final enum hr.test.Color BLUE;
public static final enum hr.test.Color BLACK;
public static final enum hr.test.Color YELLOW;
public static final enum hr.test.Color GREEN;
private static final synthetic hr.test.Color〔〕 ENUM$VALUES;
// 初始化過程,對枚舉類的所有枚舉值對象進行第一次初始化
static {
0 new hr.test.Color 〔1〕
3 p
4 ldc 〔16〕 //把枚舉值字元串「RED」壓入操作數棧
6 iconst_0 // 把整型值0壓入操作數棧
7 invokespecial hr.test.Color(java.lang.String, int) 〔17〕 //調用Color類的私有構造器創建Color對象RED
10 putstatic hr.test.Color.RED : hr.test.Color 〔21〕 //將枚舉對象賦給Color的靜態常量RED 。
。.. 。.. 。.. 枚舉對象BLUE等與上同
102 return
};
// 私有構造器,外部不可能動態創建一個枚舉類對象(也就是不可能動態創建一個枚舉值) 。
private Color(java.lang.String arg0, int arg1){
// 調用父類Enum的受保護構造器創建一個枚舉對象
3 invokespecial java.lang.Enum(java.lang.String, int) 〔38〕
};
public static hr.test.Color〔〕 values();
// 實現Enum類的抽象方法
public static hr.test.Color valueOf(java.lang.String arg0);
}
下面我們就詳細介紹enum定義的枚舉類的特徵及其用法 。(後面均用Color舉例)
1、Color枚舉類就是class,而且是一個不可以被繼承的final類 。
其枚舉值(RED,BLUE. 。.)都是Color類型的類靜態常量, 我們可以通過下面的方式來得到Color枚舉類的一個實例:
Color c=Color.RED;
注意:這些枚舉值都是public static final的,也就是我們經常所定義的常量方式,因此枚舉類中的枚舉值最好全部大寫 。
2、即然枚舉類是class,當然在枚舉類型中有構造器,方法和數據域 。
但是,枚舉類的構造器有很大的不同:
(1) 構造器只是在構造枚舉值的時候被調用 。
Java代碼:
enum Color{
RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(255,255,0),GREEN(0,255,0);
//構造枚舉值,比如RED(255,0,0)
private Color(int rv,int gv,int bv){
this.redValue=rv;
this.greenValue=gv;
this.blueValue=bv;
}
public String toString(){ //覆蓋了父類Enum的toString()
return super.toString()+「(」+redValue+「,」+greenValue+「,」+blueValue+「)」;
}
private int redValue; //自定義數據域,private為了封裝 。
private int greenValue;
private int blueValue;
}
(2) 構造器只能私有private,絕對不允許有public構造器 。 這樣可以保證外部代碼無法新構造枚舉類的實例 。這也是完全符合情理的,因為我們知道枚舉值是public static final的常量而已 。 但枚舉類的方法和數據域可以允許外部訪問 。
Java代碼:
public static void main(String args〔〕)
{
// Color colors=new Color(100,200,300); //wrong
Color color=Color.RED;
System.out.println(color); // 調用了toString()方法
}
3、所有枚舉類都繼承了Enum的方法,下面我們詳細介紹這些方法 。
(1) ordinal()方法: 返回枚舉值在枚舉類種的順序 。這個順序根據枚舉值聲明的順序而定 。
Color.RED.ordinal(); //返回結果:0
Color.BLUE.ordinal(); //返回結果:1
(2) compareTo()方法: Enum實現了java.lang.Comparable介面,因此可以比較象與指定對象的順序 。Enum中的compareTo返回的是兩個枚舉值的順序之差 。當然,前提是兩個枚舉值必須屬於同一個枚舉類,否則會拋出ClassCastException()異常 。(具體可見源代碼)
Color.RED.compareTo(Color.BLUE); //返回結果 -1
(3) values()方法: 靜態方法,返回一個包含全部枚舉值的數組 。
Color〔〕 colors=Color.values();
for(Color c:colors){
System.out.print(c+「,」);
}//返回結果:RED,BLUE,BLACK YELLOW,GREEN,
(4) toString()方法: 返回枚舉常量的名稱 。
Color c=Color.RED;
System.out.println(c);//返回結果: RED
(5) valueOf()方法: 這個方法和toString方法是相對應的,返回帶指定名稱的指定枚舉類型的枚舉常量 。
Color.valueOf(「BLUE」); //返回結果: Color.BLUE
(6) equals()方法: 比較兩個枚舉類對象的引用 。
Java代碼:
//JDK源代碼:
public final boolean equals(Object other) {
return this==other;
}
4、枚舉類可以在switch語句中使用 。
Java代碼:
Color color=Color.RED;
switch(color){
case RED: System.out.println(「it『s red」);break;
case BLUE: System.out.println(「it』s blue」);break;
case BLACK: System.out.println(「it『s blue」);break;
}
㈩ java枚舉
枚舉 一般就是能數得清的東西。像交通指示燈就只有三個顏色:黃、綠、紅
這樣有限的東西,如果我們寫個類就顯得很多餘了,所以就有了枚舉。在你寫的枚舉中 red、blue、皮亮純black都是color中的一種。用燃咐枚舉color來顯示color有哪些。將其寫在枚舉color中。
調用red的時候就需要枚舉名.變數(其實這里說red是變數是不合適的,只是為鍵州了方便理解。)變數和它的值是一樣的。 所以輸出的就是red了。