Java基礎(3):列舉類
阿新 • • 發佈:2018-12-25
文章目錄
1 列舉類入門
- 對於物件有限且固定的類,使用列舉類。
- 使用
enum關鍵字
定義列舉類。(enum關鍵字和class、interface的作用相似) - 列舉類注意事項:
- 列舉類預設繼承
java.lang.Enum
類。 - 非抽象列舉類預設使用
final
修飾,不能派生子類。 - 列舉類的例項必須在列舉類的第一行顯式列出。(列舉類的例項只能是列舉值)
- 列舉類預設繼承
package org.ywq.enumclass;
public enum SeasonEnum{
//在第一行列出列舉例項
SPRING,SUMMER,FALL,WINTER;
}
注意:
- 列舉類的例項通過
類名.例項名
呼叫。 - switch的控制表示式可以是任何列舉型別,case表示式的值可以直接用列舉值的名字,不需要新增列舉類作為限定。
package org.ywq.enumclass;
public class EnumClassTest {
public void judge(SeasonEnum s) {
switch (s) {
case SPRING:
System.out.println("春暖花開");
break;
case SUMMER:
System.out.println("夏日炎炎");
break;
case FALL:
System.out.println("秋高氣爽");
break;
case WINTER:
System.out.println("冬日飄雪");
break;
}
}
public static void main(String[] args) {
for (SeasonEnum s : SeasonEnum.values()) {
System.out.println(s);
}
new EnumClassTest().judge(SeasonEnum.SPRING);
}
}
2 java.lang.Enum類
常用方法
Enum類的常用方法,可以由使用者自己定義的列舉類使用。(繼承)
Modifier and Type | Method | Description |
---|---|---|
String | name() | 返回此列舉例項的名稱 |
public static <T extends Enum>T | valueOf(Class enumType, String name) | 返回列舉類中指定名稱的列舉值 |
3 列舉類的成員變數和方法
- 列舉類的成員變數建議都設為
private final
. - 列舉類的構造方法一般顯式定義帶引數,因為列舉值要呼叫對應的構造器來建立,所以列出的列舉值也必須傳入引數。
- 列舉類構造器使用
private
修飾,即不能新建列舉類物件。public enum Gender{ //列舉值要呼叫對應的構造器來建立 MALE("男"),FEMALE("女"); //等價於:public static final Gender MALE = new Gender("男"); // public static final Gender FEMALE = new Gender("女"); private final String name; //構造器 private Gender(String name){ this.name=name; } public String getName(){ return this.name; } }
4 列舉類實現介面
列舉類可以和普通類一樣實現介面,但這種實現使得每個列舉例項的介面實現方法都一樣。若要為每個列舉值提供不同實現方式,參照匿名物件實現:
//介面
public interface GenderDesc{
void info();
}
//列舉類實現介面
public enum Gender implements GenderDesc{
MALE("男"){
public void info(){
System.out.println("這個列舉值代表男性");
}
},
FEMALE("女"){
public void info(){
System.out.println("這個列舉值代表女性");
}
};
private final String name;
private Gender(String name){
this.name=name;
}
}
注意:此時的列舉值不是Gender列舉類的例項,而是Gender的匿名子類的例項。
5 抽象列舉類
- 列舉類中有抽象方法時,系統自動為其新增
abstract關鍵字
,不能手動新增。 - 列舉值中要重寫列舉類的抽象方法。
package org.ywq.absenumclass;
public enum Operation {
ADD {
public double oper(double x, double y) {
return x + y;
}
},
SUB {
public double oper(double x, double y) {
return x - y;
}
},
MUL {
public double oper(double x, double y) {
return x * y;
}
},
DIV {
public double oper(double x, double y) {
return y == 0 ? y : x / y;
}
};
// 抽象方法
public abstract double oper(double x, double y);
public static void main(String[] args) {
System.out.println(Operation.ADD.oper(1.2, 2.1));
System.out.println(Operation.SUB.oper(1.2, 2.1));
System.out.println(Operation.MUL.oper(1.2, 2.1));
System.out.println(Operation.DIV.oper(1.2, 2.1));
}
}