java枚舉怎麼定義數組,java 如何定義枚舉類型數據

本文目錄一覽:

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 dup

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中的枚舉類型指的是什麼啊?

枚舉你就把他看做一個在list這堆數據裏面找出想要數據的一隻手,通常枚舉的實例都從list這個類裏面來實例,其作用說白了就是用來循環這個list(通常的使用目的),list裏面存放的是一個類。所以用枚舉而不是用像數組一樣的數字下標

java 枚舉數組的問題

枚舉enum是關鍵字,和private、public等一樣是關鍵字,不是enum類,

對於關鍵字,api沒有列出其介紹。

enum Color{//枚舉常量

 red,green,black

}

Color colors[]=Color.values();

Java中如何將字符枚舉類變成一個數組

要變成怎樣的數組,是枚舉數組、還是將枚舉的各值變成數組 。。。。。。

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里枚舉類型用於返回一個數組的方法values()在哪個裡啊?

用法一:常量

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

Java代碼

public enum Color {

RED, GREEN, BLANK, YELLOW

}

用法二:switch

JDK1.6之前的switch語句只支持int,char,enum類型,使用枚舉,能讓我們的代碼可讀性更強。

Java代碼

enum Signal {

GREEN, YELLOW, RED

}

public class TrafficLight {

Signal color = Signal.RED;

public void change() {

switch (color) {

case RED:

color = Signal.GREEN;

break;

case YELLOW:

color = Signal.RED;

break;

case GREEN:

color = Signal.YELLOW;

break;

}

}

}

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

如果打算自定義自己的方法,那麼必須在enum實例序列的最後添加一個分號。而且 Java 要求必須先定義 enum 實例。

Java代碼

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 static String getName(int index) {

for (Color c : Color.values()) {

if (c.getIndex() == index) {

return c.name;

}

}

return null;

}

// get set 方法

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;

}

}

用法四:覆蓋枚舉的方法

下面給出一個toString()方法覆蓋的例子。

Java代碼

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;

}

}

用法五:實現接口

所有的枚舉都繼承自java.lang.Enum類。由於Java 不支持多繼承,所以枚舉對象不能再繼承其他類。

Java代碼

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);

}

}

用法六:使用接口組織枚舉

Java代碼

public interface Food {

enum Coffee implements Food{

BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO

}

enum Dessert implements Food{

FRUIT, CAKE, GELATO

}

}

用法七:關於枚舉集合的使用

java.util.EnumSet和java.util.EnumMap是兩個枚舉集合。EnumSet保證集合中的元素不重複;EnumMap中的 key是enum類型,而value則可以是任意類型。關於這個兩個集合的使用就不在這裡贅述,可以參考JDK文檔。

關於枚舉的實現細節和原理請參考:

參考資料:《ThinkingInJava》第四版

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/244982.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:05
下一篇 2024-12-12 13:05

相關推薦

  • int類型變量的細節與注意事項

    本文將從 int 類型變量的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變量進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變量。 一、定義與聲明 int…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29

發表回復

登錄後才能評論