Java開發知識之Java的列舉
Java開發知識之Java的列舉
一丶什麼是列舉
列舉可以理解為就是常量,在Java中我們定義常量.都是用 final語句. C++中都是用const關鍵字.
列舉跟C++概念都是一樣的.就是特定的常量而已.
二丶Java中的列舉
java中的常量.一般都是final定義.但是我們講過.final定義的常量.初始化的時候可以每次給不同的值.
所以加上static 才能保證其記憶體不會改變.一般常量都是定義在介面中給我們使用的.
可能需要連續定義.
例如:
public final static int a = 1;
public final static int b = 2;
public final static int c = 3;
....
列舉就是管理一組常量的一個結構而已.
據圖語法如下:
許可權修飾符 enum關鍵字 列舉名稱{
列舉常量,
列舉常量,
列舉常量
}
列舉常量的定義
列舉名稱 常量;
具體使用如下程式碼:
類程式碼:
public class MyTestenum { public MyTestenum() { // TODO 自動生成的建構函式存根 } public enum NUMBER{ N_NUMBER1, N_NUMBER2, N_NUMBER3 } }
外部new物件.並且使用enum定義常量.
public static void main(String[] args) throws MyException { MyTestenum t = new MyTestenum(); NUMBER n = NUMBER.N_NUMBER1; //定義列舉常量n,必須初始化,可以為null也可以是列舉中的常量. switch(n) { case N_NUMBER1: System.out.println("1"); break;case N_NUMBER2: System.out.println("2"); break; case N_NUMBER3: System.out.println("3"); break; } }
可以看到.我們可以直接使用 列舉 定義列舉變數. 並且賦值其中一個列舉常量.
但是我們又有疑問了. 我們的列舉常量並沒有初始化.但是為什麼程式不出錯.而且還列印了1;
原因是. 列舉常量.預設就是從0開始.
三丶列舉作為方法傳遞
我們可以定義列舉常量.規定只接受什麼型別的列舉.
public class MyTestenum { public MyTestenum() { // TODO 自動生成的建構函式存根 } enum NUMBER{ N_NUMBER1 , N_NUMBER2 , N_NUMBER3 } public static void doit(NUMBER c) { switch(c) { case N_NUMBER1: break; case N_NUMBER2: break; case N_NUMBER3: break; } } }
使用:
public static void main(String[] args) throws MyException { MyTestenum.doit(NUMBER.N_NUMBER1); }
我們要傳入列舉常量才可以.
四丶列舉的高階用法
我們知道.JAVA是一個面向物件的程式. 我們定義的列舉.其實已經預設繼承了一個類
列舉型別可以看做一個類,其中的成員也都被預設使用 final public static 修飾了.所以列舉名稱(變數)
其實就是一個引用.他繼承了父類.則有父類的方法可以使用.
常用方法;
程式碼舉例以values()為例.遍歷列舉成員
public static void main(String[] args) throws MyException { MyTestenum.doit(NUMBER.N_NUMBER1); NUMBER n = null; for(int i = 0; i < n.values().length;i++) { System.out.print(" " + n.values()[i]); } }
使用方法返回了一個數組. 又使用鏈式方法.呼叫了 length求陣列成員. 下面則進行遍歷.
五丶知識總結
1.定義列舉關鍵字
enum 名稱{成員,成員};
1.列舉定義的成員. 預設都是 public static final 修飾的. 其成員是一個常量.且記憶體不可以更改.
2.列舉方法.
列舉可以當引數傳遞給方法使用.
3.列舉高階用法
列舉可以看成一個類.他的成員都是它的例項. 它整合子java.lang.Enum類. 我們可以使用方法進行遍歷.
例如values():返回列舉陣列. 可以進行遍歷列舉.並且輸出結果.