java--列舉和註解--列舉
阿新 • • 發佈:2021-07-02
-
package com.model.enumeration; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/7/2 14:34 * * 演示列舉的引出 */ public class EnumDemo01 { public static void main(String[] args) { Season spring = new Season("春天", "溫暖"); Season summer = new Season("夏天", "溫暖"); Season autumn
-
-
-
package com.model.enumeration; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/7/2 15:03 * * 演示列舉的使用:列舉的兩種實現方式 */ public class EnumDemo02 { public static void main(String[] args) { //列舉的第一鍾實現方式 System.out.println(SeasonEnumOne.SPRING.toString()); //列舉的第二鍾實現方式的使用 System.out.println(SeasonEnumTwo.SPRING.getName()+"\t"+SeasonEnumTwo.SPRING.getDesc()); } } //列舉的實現方式 //1.自定義的列舉 class SeasonEnumOne{ private String name; private String desc; // 自定義列舉的實現過程 // 1.將構造器私有化,目的是防止直接new建立 // 2.去掉set方法,防止屬性被修改 // 3.在類的內部建立固定的物件 // 4.優化,內部建立的類中加入final修飾符 private SeasonEnumOne(String name, String desc) { this.name = name; this.desc = desc; } @Override public String toString() { return "SeasonEnumOne{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } //定義了四個物件 public static final SeasonEnumOne SPRING=new SeasonEnumOne("春天", "溫暖"); public static final SeasonEnumOne SUMMER=new SeasonEnumOne("夏天", "溫暖"); public static final SeasonEnumOne AUTUMN=new SeasonEnumOne("秋天", "溫暖"); public static final SeasonEnumOne WINTER=new SeasonEnumOne("冬天", "溫暖"); public String getDesc() { return desc; } public String getName() { return name; } } //演示列舉的第二種實現方式:使用Enum關鍵字 enum SeasonEnumTwo{ /** * 列舉的實現過程: * 1.使用關鍵字enum修飾代替class * 2.定義常量要在enum類的最上方:SPRING("春天","溫暖")等價於 public static final SeasonEnumOne SPRING=new SeasonEnumOne("春天", "溫暖"); * 3.enum物件之間用 , 進行分割,不能用 ; 進行分割 * 4.enum常量寫在enum的最上方 * 5.當我們們使用無參建構函式建立列舉常量是,可以省略小括號 * 6.當我們使用enum關鍵字建立的列舉類是,預設會繼承一個Enum類,而且是一個final類,我們可以通過反編譯 SeasonEnumTwo.class * 成 SeasonEnumTwo.java 來觀察 (實用工具:javap)* * * */ SPRING("春天","溫暖"), SUMMER("夏天","溫暖"), AUTUMN("秋天","溫暖"), WINTER("冬天","溫暖"), OTHER;//省略小括號 private String name; private String desc; SeasonEnumTwo() { } private SeasonEnumTwo(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } @Override public String toString() { return "SeasonEnumTwo{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } public String getDesc() { return desc; } }
-
列舉的課堂練習
-
Enum成員方法:
-
package com.model.enumeration; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/7/2 15:19 * * 演示Enum常用方法的使用 */ public class EnumDemo03 { public static void main(String[] args) { Person one = Person.ONE; // 1.獲取列舉常量的名字 System.out.println(one.name()); // 2.輸出的列舉常量的次序\編號,從0開始編號 System.out.println(one.ordinal()); // 3.從反編譯可以看出這個方法是隱藏的,返回一個數組,陣列中含有所有的列舉物件 for (Person o:Person.values()){ System.out.println(o); } // 4.查詢類中的列舉常量是否有ONE.如果有就返回列舉常量,如果沒有就會報錯 Person one1 = Person.valueOf("ONE"); System.out.println("one1:"+one1); System.out.println(one==one1); // 5.就是比較兩個列舉常量的編號, return self.ordinal - other.ordinal; ,用one的編號-two的編號 Person two = Person.TWO; System.out.println(one.compareTo(two)); //-1 // 6.如果在列舉類沒有重寫toString()就返回物件名,在子類中重寫後輸出列舉常量的屬性 System.out.println(one.toString()); } } enum Person{ // 列舉的成員方法設定get方法,不要設定set方法,因為列舉的數值應該是固定的幾種,列舉常量的之固定 // 列舉常量放在最上面,列舉常量使用構造方法建立的final型別的常量(簡寫版),使用無參建構函式是可以稱略() // 預設的構造器為私有化 // 多個列舉常量以,進行分割 // enum修飾的類,會繼承了Enum,且別final修飾 // ONE("zzh",20),TWO("a",18),THREE("張紫韓",18),FOUR("b",18); private String name; private int age; Person() { } Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } public String getName() { return name; } public int getAge() { return age; } }
- Enum課堂練習
-
package com.model.enumeration; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/7/2 18:37 */ public class EnumDemo04 { public static void main(String[] args) { Day[] values = Day.values(); //values()的到所有的列舉常量 for (Day day:values){ System.out.println(day.getName()); } } } enum Day{ ONE("星期一"), TWO("星期二"), THREE("星期三"), FOUR("星期四"), FIVE("星期五"), SIX("星期六"), SEVEN("星期日"); private String name; @Override public String toString() { return "Day{" + "name='" + name + '\'' + '}'; } Day(String name) { this.name = name; } public String getName() { return name; } }
-
-
Enum使用細節:
-
package com.model.enumeration; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/7/2 20:47 * 演示Enum使用細節 */ public class EnumDemo05 { public static void main(String[] args) { Music.MUSIC.play(); } } interface Play{ //定義介面 public void play(); } enum Music implements Play{//隱藏的繼承了Enum類,並且java時單繼承,所以不能在繼承類了,但是可以實現介面 MUSIC; @Override //實現了介面,並且實現介面中的方法 public void play() { System.out.println("播放音樂"); } }
-