国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺析Java編程中枚舉類型的定義與使用

2019-11-26 14:23:38
字體:
來源:轉載
供稿:網友

定義枚舉類型時本質上就是在定義一個類,只不過很多細節由編譯器幫您補齊了,所以某些程度上,enum關鍵字的 作用就像是class或interface。

當您使用"enum"定義枚舉類型時,實質上您定義出來的類型繼承自 java.lang.Enum 類,而每個枚舉的成員其實就是您定義的枚舉類型的一個實例(Instance),它們都被默認為 final,所以您無法改變它們,它們也是 static 成員,所以您可以透過類型名稱直接使用它們,當然最重要的,它們都 是公開的(public)。

舉個例子:

OpConstants.javapublic enum OpConstants {TURN_LEFT, TURN_RIGHT, SHOOT} 

在這個例子中,OpConstants繼承自 java.lang.Enum,每個枚舉成員如TURN_LEFT、TURN_RIGHT、SHOOT,它們都是OpConstants的一個對象實例, 即是 對象實例,上面自然有一些方法可以采用,例如toString()方法被覆蓋了,可以讓您直接取得枚舉值的字符串描述,而枚舉對象定義的values ()方法可以讓您取得所有的枚舉實例,并以數組方式傳回,您使用這兩個方法來簡單的將OpConstants的內容顯示出來:

ShowEnum.javapublic class ShowEnum {  public static void main(String[] args) {    for(OpConstants constant: OpConstants.values()) {      System.out.println(constant.toString());    }  }} 

基本上println()會自動調用toString(),所以不寫toString()其實也是可以的,執行結果如下:

TURN_LEFTTURN_RIGHTSHOOT

您可以使用 "==" 或是 equals() 方法來比較枚舉對象,""==""會比較您提供的枚舉對象是不是同一個(也就是占據同一個內存位置),而equals()則是實質的比較兩個枚舉對象的內容,默認會根據枚舉的字符串值來比較。

valueOf()方法可以讓您將指定的字符串嘗試轉換為枚舉實例,您可以使用compareTo()方法,這可以比較兩個枚舉對象在枚舉時的順序,下面舉個例子

ShowEnum.javapublic class ShowEnum {  public static void main(String[] args) {    enumCompareTo(OpConstants.valueOf(args[0]));  }   public static void enumCompareTo(OpConstants constant) {    System.out.println(constant);    for(OpConstants c: OpConstants.values()) {      System.out.println(constant.compareTo(c));    }  }} 

執行結果:

$java ShowEnum TURN_RIGHT
TURN_RIGHT10-1

傳回正值,表示順序在被比較的枚舉對象之前,負值表示之后,而0則表示兩個互比枚舉值的位置是相同的。

對于每一個枚舉成員,我們可以使用ordinal()方法,依枚舉順序得到位置索引,默認以 0 開始,例如:

ShowEnum.javapublic class ShowEnum {  public static void main(String[] args) {    for(OpConstants c : OpConstants.values()) {      System.out.printf("%d %s%n", c.ordinal(), c);    }  }} 

執行結果:

0 TURN_LEFT1 TURN_RIGHT2 SHOOT

enum關鍵字可用于定義一個枚舉類,可以把相關常量寫在一個類里,下面我們再來看個例子。

如下代碼:       

class TestClass {  private TestClass(){}//定義私有構造函數,不能從外部實例化對象  //提供兩個實例A、B  public static final TestClass A=new TestClass();  public static final TestClass B=new TestClass();}

可以用枚舉類型代替:

enum TestClass01{  A,B;}

用法:

一個枚舉也可以有構造函數、字段和方法:

enum TestClass02{  A("a") //建立對象時傳入構造函數參數  ,B("b");  private String value;  private TestClass02(String value){    this.value=value;  }  public String getValue(){    return this.value;  }}

枚舉也可以有抽象方法:

enum TestClass03{  A(){  //實現抽象方法  public void type(){    System.out.println("優");  }  }  ,B(){  public void type(){    System.out.println("良");  }  };  public abstract void type();//定義抽象方法}

測試方法:

public class Test02 {  public static void main(String[] args){    print(TestClass02.A);//傳入枚舉參數  }  public static void print(TestClass02 t){    System.out.println(t.getValue());  }enum TestClass02{  A("a")  ,B("b");  private String value;  private TestClass02(String value){    this.value=value;  }  public String getValue(){    return this.value;  }}}

運行結果:

aAuthor:事始Sign:只要你還在嘗試,就不算失敗。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泽普县| 彰化县| 蛟河市| 利辛县| 禹城市| 临安市| 泸州市| 拜泉县| 沅江市| 彰化市| 合江县| 册亨县| 肇东市| 沁阳市| 北川| 桑日县| 横山县| 那坡县| 常熟市| 乐安县| 门头沟区| 天津市| 安吉县| 洛扎县| 阆中市| 武邑县| 汤阴县| 佳木斯市| 泌阳县| 台江县| 五指山市| 建始县| 应城市| 资源县| 陆河县| 黑山县| 岳阳县| 象州县| 岳阳县| 溆浦县| 加查县|