Java枚舉enum關鍵字


枚舉的理解

枚舉其實就是一個類,枚舉類的實例是一組限定的對象

傳統的方式創建枚舉 【了解】

對比:單例類

1、構造器私有化
2、本類內部創建對象
3、通過public static方法,對外暴露該對象

枚舉類

1、構造器私有化
2、本類內部創建一組對象,添加public static修飾符,直接暴露對象

/**
 * 此類用於演示使用傳統的方式創建枚舉
 * 步驟
 *    1、構造器私有化    
    2、本類內部創建一組對象,添加public static final修飾符,直接暴露對象
 */
public class TestEnum1 {
    public static void main(String[] args) {
        //引用枚舉類的對象        
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
}//簡單示例2:提供有參構造
class Season{
    private String name;//季節名稱
    private String description;//季節描述
    //2.本類內部創建一組對象,添加public static修飾符,直接暴露對象
    public static final Season SPRING = new Season("春天","春風又綠江大南");
    public static final Season SUMMER = new Season("夏天","接天蓮葉無窮碧");
    public static final Season AUTUMN = new Season("秋天","霜葉紅於二月花");
    public static final Season WINTER = new Season("冬天","千樹萬樹梨花開");
    
    //1、構造器私有化    
    private Season(String name, String description) {
        super();
        this.name = name;
        this.description = description;
    }
    public String getName() {
        return name;
    }
    
    public String getDescription() {
        return description;
    }
@Override
public String toString() { return "Season [name=" + name + ", description=" + description + "]"; } }

使用enum關鍵字定義枚舉掌握

引入:jdk5.0出現的新特性

【特點】

1、使用enum關鍵字代替class關鍵字
2、對象(常量)的創建必須放在枚舉類中的第一句

【語法】

對象名(實參列表), 對象名(實參列表);

3、如果是無參構造,則無參構造的定義和實參列表都可以省略

/**
 * 此類用於演示使用enum關鍵字定義枚舉類【掌握】
 * 引入:jdk5.0出現的新特性
 * 特點:
 *         1、使用enum關鍵字代替class關鍵字
 *         2、對象(常量)的創建必須放在枚舉類中的第一句
 *         語法:
 *         對象名(實參列表),對象名(實參列表);
 *         3、如果是無參構造,則無參構造的定義和實參列表都可以省略
 *
 */
public class TestEnum2 {
    
    public static void main(String[] args) {
        //引用枚舉類的對象
        //示例1:
        System.out.println(Gender2.GIRL);
        
        //示例2:
        System.out.println(Season2.SUMMER);
    }
}
enum Season2{
    //2.本類內部創建一組對象,添加public static修飾符,直接暴露對象
    SPRING("春天","春風又綠江大南"),
    SUMMER ("夏天","接天蓮葉無窮碧"),
    AUTUMN ("秋天","霜葉紅於二月花"),
    WINTER("冬天","千樹萬樹梨花開");

    private String name;
    private String description;
    
    //1、構造器私有化    
    private Season2(String name, String description) {
        this.name = name;
        this.description = description;
    }
    public String getName() {
        return name;
    }
    public String getDescription() {
        return description;
    }
}

//簡單示例1:使用無參構造器:枚舉常量
enum Gender2{
    BOY,GIRL;
}

介紹枚舉類的常見方法【了解】

toString:Enum類已經重寫過了,返回的是當前對象的常量名。自定義的枚舉類可以繼續重寫該方法

name:Enum類中的name方法返回的是當前對象的常量名(同toString),但自定義的枚舉類不可以繼續重寫該方法

values:一個靜態方法,用於返回指定的枚舉類中的所有枚舉常量

valueOf:一個靜態方法,將一個有效的字符串轉換成枚舉對象

枚舉類如何實現接口掌握

特點:

1. 和普通類實現接口一樣,只是允許枚舉常量也有自己對抽象方法的特有實現!

2. enum類不能再繼承其他類,因為已經隱式的直接繼承了Enum類

語法:

enum A implements 接口1,接口2{
    常量1(參數){
        //抽象方法的實現
 
    },常量2(參數){
        //抽象方法的實現
    }
    //類對抽象方法的實現
 }

示例:

/**
 * 此類用於演示枚舉類實現接口
 * 
 * 特點:
 *     1.和普通類實現接口一樣,只是允許枚舉常量也有自己對抽象方法的特有實現!
 *     2.enum類不能再繼承其他類,因為已經隱式的直接繼承了Enum類
 * 語法:
 * enum A implements 接口1,接口2{
 *         常量1(參數){
 *             //抽象方法的實現
 * 
 *         },常量2(參數){
 * 
 *             //抽象方法的實現
 *         }
 *         //類對抽象方法的實現
 * }
 *
 */
public class TestEnum4 {
    
    public static void main(String[] args) {
        Show s = Color4.RED;
        s.display();
        
        Color4.BLACK.display();
    }
}
interface Show{
    void display();
}
enum Color4 implements Show{
    RED(255,0,0){
        public void display(){
            System.out.println("我是紅色");
        }
    },
    BLUE(0,0,255){
        public void display(){
            System.out.println("我是藍色");
        }
    },
    BLACK(0,0,0){
        public void display(){
            System.out.println("我是藍色");
        }
    },
    YELLOW(255,255,0){
        public void display(){
            System.out.println("我是黃色");
        }
    },
    GREEN(0,255,0){
        public void display(){
            System.out.println("我是藍色");
        }
    };
    private int redValue;
    public int getRedValue() {
        return redValue;
    }
    public int getGreenValue() {
        return greenValue;
    }
    public int getBlueValue() {
        return blueValue;
    }
    private int greenValue;
    private int blueValue;
    private Color4(int redValue, int greenValue, int blueValue) { // 構造器
        this.redValue = redValue;
        this.greenValue = greenValue;
        this.blueValue = blueValue;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM