1. 程式人生 > 其它 >Java基礎第二遍-列舉類

Java基礎第二遍-列舉類

列舉類

  1. 簡介
    1. 類的物件是有限個的,例如:星期:(星期1-星期7)
  2. 定義一組常量時,強烈建議使用列舉類
  3. 如果列舉類只有一個物件,那麼可以作為單例模式實現

列舉類的使用

  1. 自定義列舉類
//jkd1.5以前實現列舉類
package com.bixiangdong.enum1;

public class Demo01 {
}
//自定義列舉類
class Season{
    //宣告Season物件的屬性private final
    private final String seasonName;
    private final String seasonDesc;

    //私有化類的構造器,並給物件屬性賦值
    private Season(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }
    //提供當前列舉類的多個物件,public static final
    public static final Season SPRING = new Season("春天","這是春天");
    public static final Season SUMMER = new Season("夏天","這是夏天");
    public static final Season AUTUME = new Season("秋天","這是秋天");
    public static final Season WINTER = new Season("冬天","這是冬天");
    
    //獲取列舉類物件的屬性

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}
  1. enum關鍵字
public class Demo02 {
}
//自定義列舉類,enum建立的列舉類自動繼承,Enum
enum Season1{
    //提供當前列舉類的多個物件,簡化了一些配置但本質還是public static final
    SPRING("春天","這是春天"),
    SUMMER("夏天","這是夏天"),
    AUTUME("秋天","這是秋天"),
    WINTER("冬天","這是冬天");
    //宣告Season物件的屬性private final
    private final String seasonName;
    private final String seasonDesc;

    //私有化類的構造器,並給物件屬性賦值
    private Season1(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }


    //獲取列舉類物件的屬性

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}
  1. Enum類的主要方法
    1. values();
    2. valueOf();
    3. toString();
package com.bixiangdong.enum1;

public class Demo02 {
    public static void main(String[] args) {
        //返回列舉類的所有物件,一陣列的形式儲存
        Season1[] values = Season1.values();
        //根據字串獲取物件的列舉物件 valueOf中大小寫敏感
        Season1 spring = Season1.valueOf("SPRING");
        System.out.println(spring);
        //toString();返回當前物件名稱
        System.out.println(Season1.AUTUME.toString());
    }
}
//自定義列舉類,enum建立的列舉類自動繼承,Enum
enum Season1{
    //提供當前列舉類的多個物件,簡化了一些配置但本質還是public static final
    SPRING("春天","這是春天"),
    SUMMER("夏天","這是夏天"),
    AUTUME("秋天","這是秋天"),
    WINTER("冬天","這是冬天");
    //宣告Season物件的屬性private final
    private final String seasonName;
    private final String seasonDesc;

    //私有化類的構造器,並給物件屬性賦值
    private Season1(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }


    //獲取列舉類物件的屬性

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

//    @Override
//    public String toString() {
//        return "Season{" +
//                "seasonName='" + seasonName + '\'' +
//                ", seasonDesc='" + seasonDesc + '\'' +
//                '}';
//    }
}
  1. 實現介面的列舉類
package com.bixiangdong.enum1;

public class Demo03 {
}
interface Test{
    void show();
}
//列舉類實現介面並重寫方法,第一種重寫的方法
enum Season2 implements Test{
    //提供當前列舉類的多個物件,簡化了一些配置但本質還是public static final
    SPRING("春天","這是春天"),
    SUMMER("夏天","這是夏天"),
    AUTUME("秋天","這是秋天"),
    WINTER("冬天","這是冬天");
    //宣告Season物件的屬性private final
    private final String seasonName;
    private final String seasonDesc;

    //私有化類的構造器,並給物件屬性賦值
    private Season2(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }


    //獲取列舉類物件的屬性

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    @Override
    public void show() {
        System.out.println("第一種重寫的方法");
    }
}
//列舉類實現介面並重寫方法,第一種重寫的方法
enum Season3 implements Test{
    //提供當前列舉類的多個物件,簡化了一些配置但本質還是public static final
    SPRING("春天","這是春天"){
        @Override
        public void show() {
            System.out.println("物件中重寫,每個呼叫的都不一樣");
        }
    },
    SUMMER("夏天","這是夏天"){
        @Override
        public void show() {
            System.out.println("物件中重寫,每個呼叫的都不一樣");
        }
    },
    AUTUME("秋天","這是秋天"){
        @Override
        public void show() {
            System.out.println("物件中重寫,每個呼叫的都不一樣");
        }
    },
    WINTER("冬天","這是冬天"){
        @Override
        public void show() {
            System.out.println("物件中重寫,每個呼叫的都不一樣");
        }
    };
    //宣告Season物件的屬性private final
    private final String seasonName;
    private final String seasonDesc;

    //私有化類的構造器,並給物件屬性賦值
    private Season3(String seasonName,String seasonDesc){
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }


    //獲取列舉類物件的屬性

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
}