java枚舉用法
A. java中的枚舉是什麼他的具體用法是什麼呢
Java中的枚舉是什麼?他的具體用法是什麼呢?
枚舉就是把集合里的對象元素
一個一個提取出來!比如說
你買了一合巧克力
裡面有草莓味的
有香草口味的
有蘋果口味的
你想把他們拿出來
就必須用「手」一個一個把他們拿出來
並且一次只能取一個哦
這里的手就是枚舉器
你取的動作就是枚舉的過程
具體的用法
這個我就不好說了
推薦
你看看JDK1.5的API和參考別人的範例
看完了
基本可以理解
枚舉幾種選擇(有迭代器和枚舉器2種)和如何判斷是否已經取完了對象元素
等等
我不是很喜歡講語法
所以不好意思我就不給你丟代碼了~
B. java枚舉問題
package com.ljq.test;
/**
* 枚舉用法詳解
*
* @author jiqinlin
*
*/
public class TestEnum {
/**
* 普通枚舉
*
* @author jiqinlin
*
*/
public enum ColorEnum {
red, green, yellow, blue;
}
/**
* 枚舉像普通的類一樣可以添加屬性和方法,可以為它添加靜態和非靜態的屬性或方法
*
* @author jiqinlin
*
*/
public enum SeasonEnum {
//註:枚舉寫在最前面,否則編譯出錯
spring, summer, autumn, winter;
private final static String position = "test";
public static SeasonEnum getSeason() {
if ("test".equals(position))
return spring;
else
return winter;
}
}
/**
* 性別
*
* 實現帶有構造器的枚舉
*
* @author jiqinlin
*
*/
public enum Gender{
//通過括弧賦值,而且必須帶有一個參構造器和一個屬性跟方法,否則編譯出錯
//賦值必須都賦值或都不賦值,不能一部分賦值一部分不賦值;如果不賦值則不能寫構造器,賦值編譯也出錯
MAN("MAN"), WOMEN("WOMEN");
private final String value;
//構造器默認也只能是private, 從而保證構造函數只能在內部使用
Gender(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
/**
* 訂單狀態
*
* 實現帶有抽象方法的枚舉
*
* @author jiqinlin
*
*/
public enum OrderState {
/** 已取消 */
CANCEL {public String getName(){return "已取消";}},
/** 待審核 */
WAITCONFIRM {public String getName(){return "待審核";}},
/** 等待付款 */
WAITPAYMENT {public String getName(){return "等待付款";}},
/** 正在配貨 */
ADMEASUREPRODUCT {public String getName(){return "正在配貨";}},
/** 等待發貨 */
WAITDELIVER {public String getName(){return "等待發貨";}},
/** 已發貨 */
DELIVERED {public String getName(){return "已發貨";}},
/** 已收貨 */
RECEIVED {public String getName(){return "已收貨";}};
public abstract String getName();
}
public static void main(String[] args) {
//枚舉是一種類型,用於定義變數,以限制變數的賦值;賦值時通過「枚舉名.值」取得枚舉中的值
ColorEnum colorEnum = ColorEnum.blue;
switch (colorEnum) {
case red:
System.out.println("color is red");
break;
case green:
System.out.println("color is green");
break;
case yellow:
System.out.println("color is yellow");
break;
case blue:
System.out.println("color is blue");
break;
}
//遍歷枚舉
System.out.println("遍歷ColorEnum枚舉中的值");
for(ColorEnum color : ColorEnum.values()){
System.out.println(color);
}
//獲取枚舉的個數
System.out.println("ColorEnum枚舉中的值有"+ColorEnum.values().length+"個");
//獲取枚舉的索引位置,默認從0開始
System.out.println(ColorEnum.red.ordinal());//0
System.out.println(ColorEnum.green.ordinal());//1
System.out.println(ColorEnum.yellow.ordinal());//2
System.out.println(ColorEnum.blue.ordinal());//3
//枚舉默認實現了java.lang.Comparable介面
System.out.println(ColorEnum.red.compareTo(ColorEnum.green));//-1
//--------------------------
System.out.println("===========");
System.err.println("季節為" + SeasonEnum.getSeason());
//--------------
System.out.println("===========");
for(Gender gender : Gender.values()){
System.out.println(gender.value);
}
//--------------
System.out.println("===========");
for(OrderState order : OrderState.values()){
System.out.println(order.getName());
}
}
}
C. 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的一些高級特性,否則就和簡單易懂的初衷想違背了。
D. 怎樣在Java中使用嵌套枚舉類型
Java語言中的枚舉類型的使用方法如下:
用法一:常量;
public enum Color { RED, GREEN, BLANK, YELLOW }
用法二:switch;
public class Test { 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; } // 覆蓋方法 @Override public String toString() { return this.index + "_" + this.name; } } public static void main(String[] args) { System.out.println(Color.RED.toString()); }}
用法五:實現介面;
public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour { 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; } // 介面方法 @Override public String getInfo() { return this.name; } // 介面方法 @Override public void print() { System.out.println(this.index + ":" + this.name); } }
用法六:使用介面組織枚舉。
public interface Food { enum Coffee implements Food { BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO } enum Dessert implements Food { FRUIT, CAKE, GELATO }}
以上就是Java語言中枚舉類型的基本使用方法。
E. java里什麼情況用枚舉啊
目的:為了解決類型不安全提出的
使用:當我們在類中要指定選項必須為某些類型時,就要考慮用到枚舉,這是jdk1.5之後才提出的。
類型安全的枚舉類型簡介:
1)enum:可以定義一個類型,而且還可以限制該類型的取值在某個范圍內
2)語法:enum enumName{枚舉值1,...,枚舉值n}
3)適用位置:包中、類中,但不能在方法中
4)注意:
1.所有的enum類型都繼承自java.lang.Enum;
2.自定義的enum類型不能再有子類;
3.枚舉類型的取值默認為public static final;
4.枚舉類型中可以定義屬性和方法;
5.構造器必須是私有的;
6.枚舉類型的取值就是其實例對象,它會調用該枚舉類型的構造器,還要實現枚舉類型中所有的抽象方法;
7.枚舉類型可以實現其它介面;
F. JAVA中的枚舉常量是什麼
枚舉用於聲明一組命名的常數,當一個變數有幾種可能的取值時,可以將它定義為枚舉類型。
任意兩個枚舉成員不能具有相同的名稱
在枚舉類型中聲明的第一個枚舉成員它的默值為0
允許多個枚舉成員有相同的值.
沒有顯示賦值的枚舉成員的值,總是前一個枚舉成員的值+1.
e.g:
public enum Number
{
a=1,
b,
c=1,
d
} ;
b的值為2,d的值為2.
G. 枚舉的屬性和方法
枚舉在Java中是一個類 ,代表著類的一一列舉。要想知道枚舉具體的使用首先要先知道它的具體的 屬性 和 方法 才可以。雖然說我們在實際應用中很少去關注它的屬性和方法,而是更多的關注它的 特性 ,利用它本身的特性去滿足各種有意思的場景。
由於上篇內容講了我們自定義的枚舉其實經過編譯之後,實際繼承的是lang包下的Enum類。雖然我們自定義的枚舉類中可能存在不定義私有屬性的情況,但繼承的Enum類中自身就帶有著兩個屬性,name屬性、和ordinal屬性。Enum類的源碼
name為我們枚舉值的名稱,而ordinal這個詞的意思是「序數」或者說「有順序的」,其實就是序數。我們知道枚舉所代表的就是包含一個以上枚舉值的集合,既然是集合它就是有順序的,而大多數我們使用的時候往往忽略了它的序數這個屬性,似乎忘了枚舉是枚舉這件事了。
枚舉中的序號是根據我們的枚舉中顯示的順序決定的,其實是是語法糖轉換時初始化枚舉值時決定了枚舉值的序數,枚舉中,第一個枚舉值的序數總是小於後面枚舉值的序數,且序數是從0開始的。
接著上面講的序數ordinal,針對序數我們先講枚舉的values()方法。
作為一個枚舉值的集合,所必須要有的操作肯定是遍歷,這也是靜態常量所沒有的支持的。values()其實就是獲取我們枚舉值的數組:
雖然我們自定義的枚舉類是可以使用這個方法的,但繼承的Enum類卻沒有這個方法,其實values()這個方法是很特殊的一個方法,之前說過枚舉是一種語法糖,在它真正編譯後,就會產生values()這個方法,所以我們自定義的枚舉類是可以使用這個方法的,而且values()方法所返回的其實是一個淺拷貝;
前面說到枚舉有兩個屬性,name和ordinal,但實際上枚舉只提供了根據name來獲取具體枚舉值的方法,卻沒有提供根據ordinal來獲取具體枚舉值的方法,但是values()方法也算是另外一種彌補了,根據values()得到的數據再根據ordinal序數獲取具體的枚舉值其實也是一樣的效果。valueOf()方法就是那個根據name獲取具體枚舉值的方法,使用案例:
可選姿勢為兩種,一參和兩參,具體看案例。
H. 關於java枚舉用法遇到一點問題
答:程序中首次靜態存取枚舉的其中一個成員時,比如week.SAT,會先實例化枚舉所有的成員。
等於MON()到SUN()都實例化了一遍之後,再執行給week day1=week.SAT
SAT已經是實例對象。
由於你的構造函數中有列印語句,所以會先把所有的句子列印出來。
I. 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 來定義的。
J. 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語言中枚舉類型的基本使用方法。