枚舉的理解
枚舉其實就是一個類,枚舉類的實例是一組限定的對象
傳統的方式創建枚舉 【了解】
對比:單例類
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; } }