JAVA程式設計基礎——列舉
阿新 • • 發佈:2018-12-10
一、列舉型別
(一)列舉型別是類的一種特殊形式,用於宣告一組命名的常量。
enum Student{//列舉名
ZHANGSAN,//列舉體
LISI,
WANGWU;
}
(二)宣告列舉就是定義一種特殊形式的類,但是不能通過關鍵字new建立它的例項物件。列舉型別的列舉值 ZHANGSAN, LISI, WANGWU就是Student類的例項物件。
Student student = Student.WANGWU;//列舉成員預設都是public static final的(常量)。所以列舉類的列舉值全部大寫
注:
(1)在列舉聲明當中只允許public,不允許abstract和final修飾,列舉不能是抽象的,也不允許派生;
(2)enum關鍵字(小寫);
(3)任意兩個列舉體不能有相同的名字。
(三)訪問列舉的方式與靜態常量欄位相似
package practise; enum Color{//定義列舉 RED,GREEN,WHITE,BLACK } public class enum_test { public static void main(String[] args) { Color color = Color.BLACK; Color color1 = Color.GREEN; System.out.println(color.ordinal());//返回列舉序號 System.out.println(color.toString());//返回列舉物件 System.out.println(color.name());//列舉名 System.out.println(Color.valueOf("RED")); System.out.println("===================="); //? System.out.println(color.equals(color1)); System.out.println(color == color1); System.out.println(color.compareTo(color1));//比較序號差值a.compareTo(b) a的序號減去b的序號 System.out.println(color1.compareTo(color)); System.out.println("==================="); System.out.println(color.getDeclaringClass());//列舉類的名字及路徑 System.out.println("============"); //.values() 把列舉的例項都變成一個數組, // 這個方法是由編譯器自己生成的靜態方法(原始碼中沒有) for (Color c:Color.values()) { System.out.println(c); } System.out.println("=============="); Color[] colors = Color.values(); for(int i = 0;i < colors.length;i ++){ System.out.println(colors[i]); } Color color2 = Color.RED; switch (color){ case RED: System.out.println("red"); break; case GREEN: System.out.println("green"); break; case WHITE: System.out.println("white"); break; case BLACK:System.out.println("black"); break; } //Color color3 = new Color();ERROR 列舉不能new } }
二、宣告列舉型別的其它成員
包括構造方法、方法和資料成員。
列舉類的構造方法與一般類的構造方法不同,列舉類的構造方法只能是private(可以省略,預設為private),構造方法只是在構造列舉值的時候被呼叫。
package com.en; enum Color_2{ RED(255,0,0),GREEN(0,255,0),BIUE(0,0,255); private int redValue; private int greenValue; private int blueValue; private Color_2(int rv,int gv,int bv){ this.redValue = rv; this.greenValue = gv; this.blueValue = bv; } public String toString(){ return super.toString() + "(" + redValue + "," + greenValue + "," + blueValue + ")"; } } public class TestEnum_2 { public static void main(String[] args) { Color_2 c = Color_2.BIUE; System.out.println(c);//隱式呼叫toString方法 System.out.println(c.toString());//呼叫toString方法 } }
三、列舉類的成員方法
所有的列舉類都隱式地繼承於Enum類,所以所有的列舉類都繼承了Enum類的方法。宣告列舉型別時,編譯器會自動提供一些方法。
package com.en;
enum Student{
ZHANGSAN,
LISI,
WANGWU;
}
public class TestEnum {
public static void main(String[] args) {
Student s = Student.WANGWU;//列舉成員預設都是public static final的(常量)。所以列舉類的列舉值全部大寫
Student s1 = Student.ZHANGSAN;
System.out.println(s.ordinal());//2 返回列舉常量的序號
System.out.println(s.compareTo(s1));//2 s-s1
System.out.println(s1.compareTo(s));//-2 s1-s 比較兩個列舉物件的序號
System.out.println("===================");
System.out.println(s.name());//WANGWU 返回該列舉常量的名字 (隱式呼叫toString方法)
System.out.println(s1.toString());//ZHANGSAN 返回該列舉常量的名字
System.out.println("===================");
Student s2 = Student.valueOf("LISI");//返回指定名稱的指定列舉型別的列舉常量
Student[] ss = Student.values();
for(int i = 0;i < ss.length;i ++){
System.out.println(ss[i]);
}
System.out.println("===================");
for (Student s_1:Student.values()) {
System.out.println(s_1);
}
}
}