国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java中Enum如何使用

發(fā)布時(shí)間:2021-07-04 20:13 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: 開(kāi)發(fā)技術(shù)

今天就跟大家聊聊有關(guān)Java中Enum如何使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

示例:

public enum EnumTest {       FRANK("The given name of me"),       LIU("The family name of me");       private String context;       private String getContext(){       return this.context;       }       private EnumTest(String context){       this.context = context;       }       public static void main(String[] args){       for(EnumTest name :EnumTest.values()){       System.out.println(name+" : "+name.getContext());       }       System.out.println(EnumTest.FRANK.getDeclaringClass());       }   }

Java中枚舉實(shí)現的分析:

示例:

public enum Color{        RED,BLUE,BLACK,YELLOW,GREEN    }

顯然,enum很像特殊的class,實(shí)際上enum聲明定義的類(lèi)型就是一個(gè)類(lèi)。 而這些類(lèi)都是類(lèi)庫中Enum類(lèi)的子類(lèi)(java.lang.Enum<E>)。它們繼承了這個(gè)Enum中的許多有用的方法。我們對代碼編譯之后發(fā)現,編譯器將enum類(lèi)型單獨編譯成了一個(gè)字節碼文件:Color.class。

Color字節碼代碼:

final enum hr.test.Color {       // 所有的枚舉值都是類(lèi)靜態(tài)常量  &nbsp;public static final enum hr.test.Color RED;  &nbsp;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;        // 初始化過(guò)程,對枚舉類(lèi)的所有枚舉值對象進(jìn)行***次初始化  &nbsp;static {         0  new hr.test.Color [1]         3  dup        4  ldc <String "RED"> [16] //把枚舉值字符串"RED"壓入操作數棧        6  iconst_0  // 把整型值0壓入操作數棧        7  invokespecial hr.test.Color(java.lang.String, int) [17] //調用Color類(lèi)的私有構造器創(chuàng  )建Color對象RED       10  putstatic hr.test.Color.RED : hr.test.Color [21]  //將枚舉對象賦給Color的靜態(tài)常量RED。        .........  枚舉對象BLUE等與上同      102  return };        // 私有構造器,外部不可能動(dòng)態(tài)創(chuàng  )建一個(gè)枚舉類(lèi)對象(也就是不可能動(dòng)態(tài)創(chuàng  )建一個(gè)枚舉值)。   private Color(java.lang.String arg0, int arg1){       // 調用父類(lèi)Enum的受保護構造器創(chuàng  )建一個(gè)枚舉對象       3  invokespecial java.lang.Enum(java.lang.String, int) [38]  };  &nbsp;   public static hr.test.Color[] values();         // 實(shí)現Enum類(lèi)的抽象方法      public static hr.test.Color valueOf(java.lang.String arg0);  }

下面我們就詳細介紹enum定義的枚舉類(lèi)的特征及其用法。(后面均用Color舉例)

1、Color枚舉類(lèi)就是class,而且是一個(gè)不可以被繼承的final類(lèi)。

其枚舉值(RED,BLUE...)都是Color類(lèi)型的類(lèi)靜態(tài)常量, 我們可以通過(guò)下面的方式來(lái)得到Color枚舉類(lèi)的一個(gè)實(shí)例:

Color c=Color.RED;

注意:這些枚舉值都是public static final的,也就是我們經(jīng)常所定義的常量方式,因此枚舉類(lèi)中的枚舉值***全部大寫(xiě)。

2、即然枚舉類(lèi)是class,當然在枚舉類(lèi)型中有構造器,方法和數據域。但是,枚舉類(lèi)的構造器有很大的不同:

(1) 構造器只是在構造枚舉值的時(shí)候被調用。

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(){  //覆蓋了父類(lèi)Enum的toString()                  return super.toString()+"("+redValue+","+greenValue+","+blueValue+")";                  }                       private int redValue;  //自定義數據域,private為了封裝。                  private int greenValue;                  private int blueValue;   }

(2) 構造器只能私有private,絕對不允許有public構造器。 這樣可以保證外部代碼無(wú)法新構造枚舉類(lèi)的實(shí)例。這也是完全符合情理的,因為我們知道枚舉值是public static final的常量而已。

但枚舉類(lèi)的方法和數據域可以允許外部訪(fǎng)問(wèn)。

public static void main(String args[])  {          // Color colors=new Color(100,200,300);  //wrong             Color color=Color.RED;             System.out.println(color);  // 調用了toString()方法  }

3、所有枚舉類(lèi)都繼承了Enum的方法,下面我們詳細介紹這些方法。

(1) ordinal()方法: 返回枚舉值在枚舉類(lèi)種的順序。這個(gè)順序根據枚舉值聲明的順序而定。

Color.RED.ordinal(); //返回結果:0  Color.BLUE.ordinal(); //返回結果:1

(2) compareTo()方法: Enum實(shí)現了java.lang.Comparable接口,因此可以比較象與指定對象的順序。Enum中的compareTo返回的是兩個(gè)枚舉值的順序之差。當然,前提是兩個(gè)枚舉值必須屬于同一個(gè)枚舉類(lèi),否則會(huì )拋出ClassCastException()異常。(具體可見(jiàn)源代碼)

Color.RED.compareTo(Color.BLUE); //返回結果 -1

(3) values()方法: 靜態(tài)方法,返回一個(gè)包含全部枚舉值的數組。

Color[] colors=Color.values();  for(Color c:colors){  System.out.print(c+","); }  //返回結果:RED,BLUE,BLACK YELLOW,GREEN,

(4) toString()方法: 返回枚舉常量的名稱(chēng)。

Color c=Color.RED;  System.out.println(c);//返回結果: RED

(5) valueOf()方法: 這個(gè)方法和toString方法是相對應的,返回帶指定名稱(chēng)的指定枚舉類(lèi)型的枚舉常量。

Color.valueOf("BLUE");   //返回結果: Color.BLUE

(6) equals()方法: 比較兩個(gè)枚舉類(lèi)對象的引用。

//JDK源代碼:        public final boolean equals(Object other) {            return this==other;    }

4、枚舉類(lèi)可以在switch語(yǔ)句中使用。

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

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

在线高清理伦片| 亚欧无码激情视频在线播放| 大胆欧美熟妇XX| 一本久道久久综合狠狠躁AV| 四韩色情无码一区二区三区| 亚洲色在线无码国产精品不卡|