1、問題:
- 某些方法所接受的數據必須是在固定範圍之內的,怎麼解決?
- 方案一:jdk1.5之前,自定義一個類,私有化構造函數,在自定義類中創建本類的對象對外使用。
- 方案二:jdk1.5之後,使用枚舉類(enum)來解決這種問題。
1.1 方案一:jdk1.5之前,使用自定義類解決
// 方案一:jdk1.5之前,自定義一個類,私有化構造方法,在自定義類中創建類的對象,對外使用
class Gender {
String value;//成員變量
public static final Gender man = new Gender("男");
public static final Gender woman = new Gender("女");
//私有化構造方法,使外部無法構建類的實例
private Gender(String value) {
this.value = value;
}
}
1.2 方案二:jdk1.5之後使用枚舉類解決
enum Sex {
//7.枚舉值必須位於枚舉類的第一個語句,多個枚舉值之間使用逗號(,)分開
//1.枚舉值默認的修飾符是private static final
woman("女") {
@Override
public void run() {
System.out.println("女人在跑...");
}
},
//2.枚舉值的數據類型就是枚舉值所屬類的類型,它指向了本類的對象。
//2.枚舉值 man("男") 與 private static final Sex man = new Sex("男");相等
man("男") {
@Override
public void run() {
System.out.println("男人在跑...");
}
};
String value;// 3.枚舉類可以有成員變量
private void sun() {//3.枚舉類可以有成員函數
System.out.println("枚舉類的成員函數...");
}
//4.枚舉類可以有構造函數,但是修飾符必須是private,默認也是private
private Sex(String value) {
this.value = value;
}
// 5.枚舉類可以存在抽象方法,但是枚舉值必須實現抽象方法
public abstract void run();
}
2、枚舉類
- 一些方法在運行時,他需要的數據不能是任意的,必須是固定範圍之內的值,jdk1.5後可以直接使用枚舉(enum)解決
2.1 枚舉類的格式
enum 類名{
// 枚舉值
}
2.2 枚舉類需要注意的細節
1.枚舉類是一個特殊的類 2.枚舉值默認的修飾符是:public static final 3.枚舉值就是枚舉值所屬的類的數據類型,然後枚舉值是指向了本類的對象的。 4.枚舉類的構造方法的修飾符,默認是private 5.枚舉類可以定義自己的成員變量和成員函數。 6.枚舉類可以自定義構造函數,但是修飾符必須是private 7.枚舉類可以存在抽象的方法,但是枚舉值必須實現抽象方法 8.枚舉值必須要位於枚舉類的第一個語句。
3.在switch中使用枚舉類
switch適用的數據類型:byte、short、int、char、String、枚舉 注意:case語句後邊跟的枚舉值,只需要單寫枚舉值即可,不需要再聲明該枚舉值是屬於哪個枚舉類的。
3.1 案例
public class Dome4 {
public static void main(String[] args) {
Season season = Season.spring;//枚舉類的構造方法默認是private,不能在外部創建實例
switch (season) {
case spring://當option是枚舉類的對象時,case選項不需要使用類名.屬性,直接使用屬性即可。
System.out.println("春天來了....");
break;
case summer:
System.out.println("夏天來了....");
break;
case autumn:
System.out.println("秋天來了....");
break;
case winter:
System.out.println("冬天來了....");
break;
}
}
}
// 季節枚舉類
enum Season {
spring, summer, autumn, winter // 枚舉值
}