最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java枚舉的使用與反射應(yīng)用方式

 更新時(shí)間:2024年09月23日 15:22:00   作者:夏詩(shī)曼CharmaineXia  
枚舉類(lèi)型是一種特殊的類(lèi),限定為固定實(shí)例集合,且是類(lèi)型安全和線(xiàn)程安全的,枚舉類(lèi)型不可繼承,但可以添加屬性和方法,支持單例模式,枚舉常量可以通過(guò)反射獲取和操作,提供了靈活性和擴(kuò)展性
  • 單例模式:枚舉類(lèi)型是一種有限實(shí)例的類(lèi),枚舉常量在定義時(shí)就被限定為一組固定的實(shí)例,不能動(dòng)態(tài)添加或修改。每個(gè)枚舉常量都是枚舉類(lèi)型的實(shí)例,因此枚舉類(lèi)型天然地支持單例模式。
  • 類(lèi)型安全:枚舉類(lèi)型是類(lèi)型安全的,編譯器會(huì)在編譯時(shí)檢查枚舉值的合法性,避免使用無(wú)效的枚舉常量,在多線(xiàn)程環(huán)境下使用枚舉類(lèi)型是線(xiàn)程安全的。
  • 不可繼承:枚舉類(lèi)型默認(rèn)是final修飾的,不能被繼承,因?yàn)槊杜e類(lèi)型已經(jīng)提供了固定的實(shí)例集合。
  • 可添加屬性和方法:枚舉類(lèi)型可以擁有字段、方法和構(gòu)造函數(shù),可以為每個(gè)枚舉常量添加屬性和行為。

一、定義方式

Java枚舉是一種特殊的數(shù)據(jù)類(lèi)型,用于定義一組常量集合,可以定義簡(jiǎn)單的枚舉常量,也可以為枚舉常量添加屬性和方法。

1.1 簡(jiǎn)單定義

// 定義表示星期的枚舉類(lèi)型
public enum Weekday {
    MONDAY, // 星期一
    TUESDAY, // 星期二
    WEDNESDAY, // 星期三
    THURSDAY, // 星期四
    FRIDAY, // 星期五
    SATURDAY, // 星期六
    SUNDAY // 星期日
}

1.2 帶參數(shù)定義

帶參數(shù)定義允許枚舉常量攜帶額外信息,使枚舉更具靈活性。

// 定義表示季節(jié)的枚舉類(lèi)型,每個(gè)季節(jié)攜帶中文名稱(chēng)
public enum Season {
    SPRING(1,"春天"), 
    SUMMER(2,"夏天"), 
    AUTUMN(3,"秋天"), 
    WINTER(4,"冬天"); 

	private Integer index; 
    private String chineseName; 

    public Integer getIndex() {return index;}
    public String getChineseName() {
        return chineseName;
    }
}

枚舉類(lèi)型可以通過(guò)values()方法獲取所有枚舉常量的數(shù)組,方便遍歷枚舉值。

    public static String getByCode(Integer index){
        for(Season season : values()){
            if (season.getIndex() == index) {
                return getIndex.getChineseName();
            }
        }
        return null;
    }

二、反射應(yīng)用

1. 反射獲取枚舉常量

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        // 獲取枚舉類(lèi)對(duì)象
        Class<Day> enumClass = Day.class;

        // 獲取枚舉常量
        Day[] days = enumClass.getEnumConstants();
        for (Day day : days) {
            System.out.println(day);
        }
    }
}

2. 反射獲取枚舉屬性

public class EnumReflectionExample {

    enum Day {
        MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");

        private String chineseName;

        Day(String chineseName) {
            this.chineseName = chineseName;
        }

        public String getChineseName() {
            return chineseName;
        }
    }

    public static void main(String[] args) {
        // 獲取枚舉類(lèi)對(duì)象
        Class<Day> enumClass = Day.class;

        // 獲取枚舉屬性
        try {
            Field chineseNameField = enumClass.getDeclaredField("chineseName");
            chineseNameField.setAccessible(true);

            for (Day day : Day.values()) {
                String chineseName = (String) chineseNameField.get(day);
                System.out.println(day + " 的中文名是:" + chineseName);
            }
        } catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

3. 動(dòng)態(tài)調(diào)用枚舉方法

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;

        public void sayHello() {
            System.out.println("今天是:" + this);
        }
    }

    public static void main(String[] args) {
        // 動(dòng)態(tài)調(diào)用枚舉方法
        try {
            Day monday = Day.valueOf("MONDAY");
            monday.sayHello();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
}

4. 動(dòng)態(tài)設(shè)置枚舉屬性

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;

        private String description;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }
    }

    public static void main(String[] args) {
        // 動(dòng)態(tài)設(shè)置枚舉屬性
        Day monday = Day.MONDAY;
        monday.setDescription("星期一");
        System.out.println(monday.getDescription());
    }
}

5. 判斷枚舉類(lèi)型

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        // 枚舉類(lèi)型判斷
        Class<?> enumClass = Day.class;
        if (enumClass.isEnum()) {
            System.out.println("這是一個(gè)枚舉類(lèi)型");
        } else {
            System.out.println("這不是一個(gè)枚舉類(lèi)型");
        }
    }
}

6. 反射獲取枚舉信息

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        // 枚舉信息獲取
        Class<Day> enumClass = Day.class;
        System.out.println("枚舉類(lèi)的簡(jiǎn)單名稱(chēng):" + enumClass.getSimpleName());
        System.out.println("枚舉類(lèi)的全限定名稱(chēng):" + enumClass.getName());
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • k8s部署的java服務(wù)添加idea調(diào)試參數(shù)的方法

    k8s部署的java服務(wù)添加idea調(diào)試參數(shù)的方法

    文章介紹了如何在K8S容器中的Java服務(wù)上進(jìn)行遠(yuǎn)程調(diào)試,包括配置Deployment、Service以及本地IDEA的調(diào)試設(shè)置,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • 詳解springMVC兩種方式實(shí)現(xiàn)多文件上傳及效率比較

    詳解springMVC兩種方式實(shí)現(xiàn)多文件上傳及效率比較

    本篇文章介紹了springMVC兩種方式實(shí)現(xiàn)多文件上傳及效率比較。springMVC實(shí)現(xiàn)多文件上傳有兩種,一種是字節(jié)流的方式進(jìn)行文件上傳,另外一種是使用springMVC包裝好的解析器進(jìn)行上傳,有興趣的可以了解一下。
    2016-12-12
  • Java設(shè)計(jì)模式之策略模式案例詳解

    Java設(shè)計(jì)模式之策略模式案例詳解

    策略模式(Strategy?Pattern)定義了一組同類(lèi)型的算法,在不同的類(lèi)中封裝起來(lái),每種算法可以根據(jù)當(dāng)前場(chǎng)景相互替換,從而使算法的變化獨(dú)立于使用它們的客戶(hù)端即算法的調(diào)用者
    2022-07-07
  • JAVA基礎(chǔ)之控制臺(tái)輸入輸出的實(shí)例代碼

    JAVA基礎(chǔ)之控制臺(tái)輸入輸出的實(shí)例代碼

    下面小編就為大家?guī)?lái)一篇JAVA基礎(chǔ)之控制臺(tái)輸入輸出的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • JVM參數(shù)NativeMemoryTracking的使用

    JVM參數(shù)NativeMemoryTracking的使用

    本文主要介紹了JVM參數(shù)NativeMemoryTracking的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Mybatis 高級(jí)用法和tk.mybatis使用示例詳解

    Mybatis 高級(jí)用法和tk.mybatis使用示例詳解

    tkmybatis 是對(duì)底層 sql 進(jìn)行了抽象封裝,不需要考慮 sql 怎么寫(xiě),只需要按照邏輯思維,遵循 tkmybatis 的語(yǔ)法即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作,這篇文章主要介紹了Mybatis 高級(jí)用法和tk.mybatis使用,需要的朋友可以參考下
    2024-05-05
  • Java導(dǎo)出Excel動(dòng)態(tài)表頭的示例詳解

    Java導(dǎo)出Excel動(dòng)態(tài)表頭的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java導(dǎo)出Excel動(dòng)態(tài)表頭的相關(guān)知識(shí),文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下
    2025-02-02
  • 使用IDEA對(duì)SpringBoot應(yīng)用進(jìn)行遠(yuǎn)程調(diào)試方式

    使用IDEA對(duì)SpringBoot應(yīng)用進(jìn)行遠(yuǎn)程調(diào)試方式

    文章介紹了如何在IDEA中對(duì)部署在服務(wù)器上的SpringBoot應(yīng)用進(jìn)行遠(yuǎn)程調(diào)試,通過(guò)配置遠(yuǎn)程調(diào)試端口和啟動(dòng)參數(shù),本地IDEA可以設(shè)置斷點(diǎn)并進(jìn)行調(diào)試
    2025-02-02
  • java 獲取對(duì)象中為null的字段實(shí)例代碼

    java 獲取對(duì)象中為null的字段實(shí)例代碼

    這篇文章主要介紹了java 獲取對(duì)象中為null的字段實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Java?for循環(huán)倒序輸出的操作代碼

    Java?for循環(huán)倒序輸出的操作代碼

    在Java中,要實(shí)現(xiàn)一個(gè)for循環(huán)的倒序輸出,通常我們會(huì)使用數(shù)組或集合(如ArrayList)作為數(shù)據(jù)源,然后通過(guò)倒序遍歷這個(gè)數(shù)組或集合來(lái)實(shí)現(xiàn),這篇文章主要介紹了Java?for循環(huán)倒序輸出,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

方正县| 武汉市| 哈密市| 黑龙江省| 镇远县| 余江县| 澎湖县| 毕节市| 平顺县| 靖西县| 扶绥县| 奈曼旗| 四川省| 澎湖县| 宣化县| 东方市| 安多县| 黄骅市| 嵊泗县| 平潭县| 浦东新区| 广汉市| 平武县| 莆田市| 溧水县| 阜城县| 达尔| 思南县| 綦江县| 宜城市| 客服| 定结县| 吉水县| 忻州市| 武冈市| 和林格尔县| 土默特右旗| 阿坝| 克拉玛依市| 邢台县| 临沭县|