枚舉類筆記

1、問題:

  1. 某些方法所接受的數據必須是在固定範圍之內的,怎麼解決?
    1. 方案一:jdk1.5之前,自定義一個類,私有化構造函數,在自定義類中創建本類的對象對外使用。
    2. 方案二: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、枚舉類

  1. 一些方法在運行時,他需要的數據不能是任意的,必須是固定範圍之內的值,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  // 枚舉值
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章