當前位置:首頁 » 編程語言 » 枚舉遍歷java

枚舉遍歷java

發布時間: 2023-02-09 09:31:16

『壹』 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中枚舉怎麼遍歷

我們可以通過反射, 以及枚舉類的靜態方法values()來進行遍歷:
代碼:
enum Rating {
UNRATED, G, PG, PG13, R, NC17
}
public class Test {
public static void main(String args[]) {
System.out.println("第一種通過反射");
Class clz = Rating.class;
for (Object obj: clz.getEnumConstants()) {
System.out.println(obj);
}
System.out.println("第二種通過枚舉靜態方法values()");
for (Rating rate: Rating.values()) {
System.out.println(rate);
}
}
}
運行結果:
第一種通過反射
UNRATED
G
PG
PG13
R
NC17
第二種通過枚舉靜態方法values()
UNRATED
G
PG
PG13
R
NC17

『叄』 java 裡面 為什麼這種方法可以對枚舉進行遍歷

這個是enum的方法, values()就是返回所有enum值。
你可以理解成
List<EnumTest> enumList = EnumTest.values();
for(EnumTest e:enumList)
{
System.out.println(e.toString);
}

『肆』 java怎麼遍歷一個枚舉數組的所有集合

每個問題只有對、錯2種情況的話,每個問題相當於1個bit。
10個問題就是10個bit
循環從0到0b11111 11111,逐個列印數字
即從0到1023循環
for(int i=0;i<1024;i++){
System.out.println(i); //每個i保留10個bit,這10個bit的每個bit就代表每個問題的對錯
}
比如
1000這個值,二進制為1111101000
可以理解成「對對對對對錯對錯錯錯」
0理解成00000 00000,代表全錯
1023理解成11111 11111代表全對
從0到1023就是所有的可能
這是最高效節省的表示法。

『伍』 枚舉和類的異同

枚舉是java 5新增了一個menu關鍵字(它與class、interface關鍵字的地位相同),用於定義枚舉,枚舉是一種特殊的類,它一樣有自己的Fileld、方法,可以實現一個或多個介面,也可以定義自己的構造器。一個java源文件中最多隻能定義一個public訪問許可權的枚舉類,且該java源文件也必須和枚舉類的類名相同。但枚舉畢竟不是普通的java類,它與普通類有如下簡單的區別:
1、枚舉類可以實現一個活多個介面,使用menu定義的枚舉直接繼承了java.long.Enum類,而不是繼承Object類。其中java.long.Enum類實現了java.long.Serializable和java.long.Comparable兩個介面。
2、使用enum定義、非抽象的枚舉默認修飾符為final,因此枚舉不能派生子類。
3、枚舉的構造器只能使用private訪問控制符,如果省略了枚舉的訪問修飾符其默認為private修飾;如果加強制定訪問修飾符則只能使用private。
4、枚舉的所有實例必須在枚舉的第一行顯示列出,否則這個枚舉永遠都不能生產實例,列出這些實例時系統會自動添加public static final修飾,無需程序員顯式添加
5、所有的枚舉類都提供了一個values方法,該方法可以很方便的遍歷所有的枚舉值

『陸』 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());
}
}

}

『柒』 java枚舉類型

InitParameter是在web.xml中配置的Servlet初始參數,採用:
<init-param></init-param>形式寫入。
Enumeration是一個枚舉介面,遍歷枚舉就能得到init-param參數名稱,如:
while
(enums.hasMoreElements
())
{
String
paramName
=
(String)
enums.nextElement
()
;
String
paramValue
=
getInitParameterValue
(paramName)
;
...
other
process
here..
}

『捌』 JAVA 枚舉類型的編程

可以通過Scanner循環錄入數據,然後將數據封裝成bean對象,再遍歷列印每個bean對象

『玖』 java的enum到底有什麼用

1.關於 Java Enum

Enum 一般用來表示一組相同類型的常量。如性別、日期、月份、顏色等。對這些屬性用常量的好處是顯而易見的,不僅可以保證單例,且比較時候可以用 」==」 來替換 equals 。是一種好的習慣。 JDK1.5 之前沒有 Enum 這個類型,那時候一般用介面常量來替代。有了 JavaEnum 之後,可以更貼近的表示這種常量。

2.如何使用 Java Enum

簡單的用法: JavaEnum 簡單的用法一般用於代表一組常用常量,可用來代表一類相同類型的常量值。如:

//性別
publicenumSexEnum{
male,female;
}
//顏色
publicenumColor{
RED,BLUE,GREEN,BLACK;
}

枚舉對象裡面的值都必須是唯一的。

可以通過 Enum 類型名直接引用該常量,如 SexEnum.male,Color.RED.

復雜用法: Java 為枚舉類型提供了一些內置的方法,同事枚舉常量還可以有自己的方法。可以很方便的遍歷枚舉對象,看個下面的例子:

WeekDay.java

/**
*@authoradmin
*2015-12-03
*定義一個枚舉類型,代表星期一到星期日的7個縮寫常量
*同時還定義了枚舉類型的屬性day,該屬性可以是final,也可是變數
*同時還定義了該枚舉類型的一個方法printDay
*/
publicenumWeekDay{
Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thursday"),Fri(
"Friday"),Sat("Saturday"),Sun("Sunday");

/**定義枚舉類型自己的屬性**/
privatefinalStringday;

privateWeekDay(Stringday){
this.day=day;
}

/**定義枚舉類型自己的方法**/
publicstaticvoidprintDay(inti){
switch(i){
case1:System.out.println(WeekDay.Mon);break;
case2:System.out.println(WeekDay.Tue);break;
case3:System.out.println(WeekDay.Wed);break;
case4:System.out.println(WeekDay.Thu);break;
case5:System.out.println(WeekDay.Fri);break;
case6:System.out.println(WeekDay.Sat);break;
case7:System.out.println(WeekDay.Sun);break;
default:System.out.println("wrongnumber!");
}
}

publicStringgetDay(){
returnday;
}
}

WeekDayTest.java

/**
*@authoradmin
*2015-12-03
*測試枚舉類型WeekDay.
*/
publicclassWeekDayTest{
publicstaticvoidmain(Stringargs[]){
for(WeekDayday:WeekDay.values()){
System.out.println(day+"====>"+day.getDay());
}
WeekDay.printDay(5);
}
}

輸出結果為:

Mon====>Monday

Tue====>Tuesday

Wed====>Wednesday

Thu====>Thursday

Fri====>Friday

Sat====>Saturday

Sun====>Sunday

Fri

『拾』 java中如何將枚舉值用循環輸出

java中可以私用enummap來保存枚舉值,示例如下:

privatestaticvoidtestEnumMap(){
//1.演示定義EnumMap對象,EnumMap對象的構造函數需要參數傳入,默認是key的類的類型
EnumMap<Light,String>currEnumMap=newEnumMap<Light,String>(
Light.class);
currEnumMap.put(Light.RED,"紅燈");
currEnumMap.put(Light.GREEN,"綠燈");
currEnumMap.put(Light.YELLOW,"黃燈");

//2.遍歷對象
for(LightaLight:Light.values()){
System.out.println("[key="+aLight.name()+",value="
+currEnumMap.get(aLight)+"]");
}
}
熱點內容
光遇國際服安卓和ios有什麼區別 發布:2024-04-24 15:54:27 瀏覽:797
centosphpfpm56 發布:2024-04-24 15:53:43 瀏覽:823
androidxhdpi 發布:2024-04-24 15:37:42 瀏覽:171
手機搭建ftp伺服器app 發布:2024-04-24 15:37:41 瀏覽:37
xt5哪個配置是電吸門 發布:2024-04-24 15:37:07 瀏覽:438
大學電腦配置哪個專業好 發布:2024-04-24 15:28:53 瀏覽:438
python在線課程 發布:2024-04-24 15:16:31 瀏覽:667
安卓光遇如何快速獲得20個愛心 發布:2024-04-24 15:16:27 瀏覽:904
電腦上怎麼建伺服器 發布:2024-04-24 15:15:33 瀏覽:567
dos安卓版怎麼用 發布:2024-04-24 15:15:32 瀏覽:542