1. 程式人生 > 實用技巧 >Java中的列舉類

Java中的列舉類

一、基本形式

public enum 類名{A,B,C;}大括號裡面為變數名,由於列舉類存放的變數用final修飾為常量,因此變數名大寫。

如:

public enum TestNume{
A,B,C;
}

列舉類的每個變數名都可看作:

public static final 類名 變數名 = new 類名();因此用類名.變數名就可以得到一個類的物件。

如:public static final TestNume A = new TestNume();

而且內部私有化列舉類的構造器private 類名() {},如下:

private TestNume(){};

由於列舉類無法通過new來獲取物件,因此定義的每個變數例項都是引用型別的唯一例項。

class Test{
public static void main(String[] args) {
TestNume D = new TestNume();
//內部已經私有構造器,因此會報錯
}
}

二、常用方法

2.1name()

顧名思義得到變數的名字,如果不重寫toString方法,類名.變數名與類名.變數名.name()相等。

public enum TestNume{
A,B,C;

}
class Test{
public static void main(String[] args) {
String name = TestNume.A

.name();
System.out.println(name);//A
}
}

2.2ordinal()

返回變數在列舉類的順序,從0開始

public enum TestNume{
A,B,C;

}
class Test{
public static void main(String[] args) {
int rank = TestNume.A.ordinal();
System.out.println(rank);//0

System.out.println(TestNume.B.ordinal());//1
System.out.println(TestNume.C.ordinal());//2
}
}

三、高階形式

上面的基本形式為列舉的無參構造,下面講解列舉的有參構造,我們可以定義private的構造方法,並且,給每個列舉常量新增欄位,欄位的修飾符pubic final不寫也會預設,構造器的修飾符private不寫,也會走預設,如下所示:

public enum TestNume{
A("a",12),B("b",15),C("c",16);
public final String name;
public final int age;
private TestNume(String name, int age) {
this.name = name;
this.age = age;
}
}

相當於:

public static final TestNume A = new TestNume("a",12);

列舉並沒有給獲取欄位值的方法,我們需要自己寫get方法

public String getName() {
return name;
}

public int getAge() {
     return age;
}

由於欄位是常量,因此無法用set方法,更改欄位的值

int aAge = TestNume.A.getAge();
TestNume.A.setAge(15);
System.out.println(aAge);//12

小結

Java使用enum定義列舉型別,它被編譯器編譯為final class Xxx extends Enum { … };

通過name()獲取常量定義的字串,注意不要使用toString();

通過ordinal()返回常量定義的順序(無實質意義);

可以為enum編寫構造方法、欄位和方法

enum的構造方法要宣告為private,欄位強烈建議宣告為final;

enum適合用在switch語句中。

引用於廖雪峰https://www.liaoxuefeng.com/wiki/1252599548343744/1260473188087424