淺析Java編程中列舉類型的界說與應用。本站提示廣大學習愛好者:(淺析Java編程中列舉類型的界說與應用)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析Java編程中列舉類型的界說與應用正文
界說列舉類型時實質上就是在界說一個類,只不外許多細節由編譯器幫您補齊了,所以某些水平上,enum症結字的 感化就像是class或interface。
當您應用"enum"界說列舉類型時,本質上您界說出來的類型繼續自 java.lang.Enum 類,而每一個列舉的成員其實就是您界說的列舉類型的一個實例(Instance),它們都被默許為 final,所以您沒法轉變它們,它們也是 static 成員,所以您可以透過類型稱號直接應用它們,固然最主要的,它們都 是地下的(public)。
舉個例子:
OpConstants.java public enum OpConstants {TURN_LEFT, TURN_RIGHT, SHOOT}
在這個例子中,OpConstants繼續自 java.lang.Enum,每一個列舉成員如TURN_LEFT、TURN_RIGHT、SHOOT,它們都是OpConstants的一個對象實例, 等於 對象實例,下面天然有一些辦法可以采取,例如toString()辦法被籠罩了,可讓您直接獲得列舉值的字符串描寫,而列舉對象界說的values ()辦法可讓您獲得一切的列舉實例,並以數組方法傳回,您應用這兩個辦法來簡略的將OpConstants的內容顯示出來:
ShowEnum.java public class ShowEnum { public static void main(String[] args) { for(OpConstants constant: OpConstants.values()) { System.out.println(constant.toString()); } } }
根本上println()會主動挪用toString(),所以不寫toString()其實也是可以的,履行成果以下:
TURN_LEFT TURN_RIGHT SHOOT
您可使用 "==" 或是 equals() 辦法來比擬列舉對象,""==""會比擬您供給的列舉對象是否是統一個(也就是占領統一個內存地位),而equals()則是本質的比擬兩個列舉對象的內容,默許會依據列舉的字符串值來比擬。
valueOf()辦法可讓您將指定的字符串測驗考試轉換為列舉實例,您可使用compareTo()辦法,這可以比擬兩個列舉對象在列舉時的次序,上面舉個例子
ShowEnum.java public 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_RIGHT 1 0 -1
傳回正值,表現次序在被比擬的列舉對象之前,負值表現以後,而0則表現兩個互比列舉值的地位是雷同的。
關於每個列舉成員,我們可使用ordinal()辦法,依列舉次序獲得地位索引,默許以 0 開端,例如:
ShowEnum.java public class ShowEnum { public static void main(String[] args) { for(OpConstants c : OpConstants.values()) { System.out.printf("%d %s%n", c.ordinal(), c); } } }
履行成果:
0 TURN_LEFT 1 TURN_RIGHT 2 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; } } }
運轉成果:
a Author:事始 Sign:只需你還在測驗考試,就不算掉敗。