圖神經網路相關問題
阿新 • • 發佈:2022-05-06
列舉
自定義類實現列舉
1.不需要提供set方法,因為列舉物件值通常為只讀
2.對列舉物件/屬性使用final + static共同修飾,實現底層優化
3.列舉物件名通常使用全部大寫,常量的命名規範
4.列舉物件根據需要,也可以有多個屬性
package Enumeration01; /** * @author gaoqinghui * @date 2022/5/3 23:40 */ public class Enumeration02 { public static void main(String[] args) { System.out.println(Season.SPRING); System.out.println(Season.SUMMER); System.out.println(Season.AUTUMN); System.out.println(Season.WINTER); } } //演示定義列舉型別 class Season {//類 private String name; private String desc; //描述 //定義了四個固定物件。 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.將構造器私有化,防止直接被new //2.去掉set方法,防止屬性被修改 //3.在Season內部建立固定物件 //4.優化,可以加入final修飾符 private Season(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }
小結:
1.構造器私有化
2.本類內部建立一組物件
3.對外暴露物件(通過為物件新增public final static修飾符)
4.可以提供get方法,但是不要提供set
使用列舉類關鍵字來定義列舉類
1.使用關鍵字enum代替class
2.直接使用SPRING("春天","溫暖"), 常量名(實參列表)
3.如果有多個常量(物件),使用,間隔
4.如果使用enum來實現列舉,要求將定義常量物件放在行首
5.如果我們使用的是無參構造器,建立常量物件,則可以省略括號和內容
6.當我們使用enum關鍵字開發一個列舉類時,預設會繼承Enum類,而且是一個final類
7.使用enum關鍵字後,就不能再繼承其他類,因為enum會隱式繼承Enum類,而Java是單繼承機制
8.列舉類和普通類一樣,可以實現介面,如下形式:
enum 類名 implements 介面1,介面2
package Enumeration01; /** * @author gaoqinghui * @date 2022/5/4 16:26 */ public class Enumeration03 { public static void main(String[] args) { System.out.println(Season2.AUTUMN); System.out.println(Season2.SPRING); System.out.println(Season2.SUMMER); System.out.println(Season2.WINTER); } } enum Season2 { // public static final Season2 SPRING = new Season2("春天","溫暖"); // public static final Season2 SUMMER = new Season2("夏天","炎熱"); // public static final Season2 AUTUMN = new Season2("秋天","涼爽"); // public static final Season2 WINTER = new Season2("冬天","寒冷"); //如果使用了enum來實現列舉類 //1.使用關鍵字enum代替class //2.直接使用SPRING("春天","溫暖"), 常量名(實參列表) //3.如果有多個常量(物件),使用,間隔 //4.如果使用enum來實現列舉,要求將定義常量物件放在行首 //5.如果我們使用的是無參構造器,建立常量物件,則可以省略括號和內容 //6.當我們使用enum關鍵字開發一個列舉類時,預設會繼承Enum類,而且時一個final類 SPRING("春天","溫暖"), SUMMER("夏天","炎熱"), AUTUMN("秋天","涼爽"), WINTER("冬天","寒冷"), WHAT; private String name; private String desc; private Season2(){ } private Season2(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season2{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }
列舉方法
package Enumeration01;
/**
* @author gaoqinghui
* @date 2022/5/4 17:00
*/
public class EnumerationMethod {
public static void main(String[] args) {
Season2 autumu = Season2.AUTUMU;
//輸出列舉物件常量名稱
System.out.println(autumu.name());
//ordinal()輸出的時該列舉物件的次序編號,從0開始
//AUTUMN列舉物件時Season列舉類中第三個,編號從0開始
System.out.println(autumu.ordinal());
//從反編譯可以看到,values方法,返回Season2[]
//含有定義的所有列舉物件
//也就是返回當前列舉類中的所有常量
Season2[] values = Season2.values();
for(Season2 season: values){//增強for迴圈
System.out.println(season);
}
//valueOF:將字串轉換為列舉物件,要求字串必須為已有常量名,否則異常
Season2 autumu1 = Season2.valueOf("AUTUMU");
System.out.println("autumu1= " + autumu1);
System.out.println(autumu == autumu1); //true
//compareTo:比較兩個列舉常量,比較的就是位置號
//比較的位置號返回的值為 self.ordinal - other.ordinal
//也就是自己的位置編號減去比較的那個位置編號
//下面這個例子中就是AUTUMU對應的位置編號減WINTER對應的位置編號
//AUTUMU的位置編號是2,WINTER的位置編號是3,返回的是-1
System.out.println(Season2.AUTUMU.compareTo(Season2.WINTER));
}
}
列舉型別中的構造方法:
package Enumeration01;
/**
* @author gaoqinghui
* @date 2022/5/4 18:18
*/
public class EnumerationExercise02 {
enum ColorEnum {
RED(1,"我是紅色"),
BLUE(2,"我是藍色"),
GREEN(3,"我是綠色");
private final int value;
private final String description;
ColorEnum(int value, String description) {
this.value = value;
this.description = description;
}
public int getValue() {
return value;
}
public String getDescription() {
return description;
}
public static ColorEnum valueOf(int value){
switch (value){
case 1:
return ColorEnum.RED;
case 2:
return ColorEnum.BLUE;
case 3:
return ColorEnum.GREEN;
default:
return null;
}
}
}
public static void main(String[] args) {
for(ColorEnum c : ColorEnum.values()){
System.out.println("列舉成員:" + c + "值:" +
c.getValue() + " 描述:" + c.getDescription());
}
System.out.println("值轉換稱列舉:" + ColorEnum.valueOf(2));
System.out.println("字串轉換成列舉:" + ColorEnum.valueOf("GREEN"));
}
}
列舉中實現介面:
列舉類中的抽象方法/介面實現,需要列舉類中的每個物件都對其進行實現。
package Enumeration01;
interface d {
public int getValue();
public String getDescription();
}
/**
* @author gaoqinghui
* @date 2022/5/4 18:42
* 列舉中實現介面
* 可以將這個getDescription()方法放置在介面中,
* 使列舉型別實現介面,然後使每個列舉型別實現介面中的方法。
*/
public enum EnumerationExercise03 implements d{
RED{
public int getValue() {
return 1;
}
public String getDescription() {
return "我是紅色";
}
},
BLUE{
public int getValue() {
return 2;
}
public String getDescription() {
return "我是藍色";
}
},
GREEN{
public int getValue() {
return 3;
}
public String getDescription() {
return "我是綠色";
}
};
public static void main(String[] args) {
for (EnumerationExercise03 c: EnumerationExercise03.values()){
System.out.println("列舉成員:" + c + "值:" +
c.getValue() + " 描述:" + c.getDescription());
}
}
}