欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的枚舉,注解和反射(一)

 更新時(shí)間:2021年07月05日 09:06:00   作者:保護(hù)眼睛  
今天小編就為大家分享一篇關(guān)于Java枚舉,注解與反射原理說(shuō)明,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

枚舉

什么是枚舉?

枚舉的字面意思就是 一一列舉出來(lái)

在數(shù)學(xué)和計(jì)算機(jī)科學(xué)理論中,一個(gè)集的枚舉是列出某些有窮序列集的所有成員的程序,或者是一種特定類型對(duì)象的計(jì)數(shù)。這兩種類型經(jīng)常(但不總是)重疊。是一個(gè)被命名的整型常數(shù)的集合,枚舉在日常生活中很常見,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一個(gè)枚舉。再比如線程的狀態(tài):創(chuàng)建、運(yùn)行、阻塞、等待、消亡,這也是一個(gè)枚舉。

在java中的枚舉也是類似的:

枚舉是在JDK1.5以后引入的。主要用途是:將一組常量組織起來(lái)。

當(dāng)需要定義一組常量的時(shí)候就可以使用枚舉。枚舉的對(duì)象是有限的、確定的。

枚舉本身就是一個(gè)類,其構(gòu)造方法默認(rèn)為私有的。

如果枚舉類的對(duì)象只有一個(gè),則可以作為單例模式的一種實(shí)現(xiàn)方式。

枚舉類的實(shí)現(xiàn)

自定義實(shí)現(xiàn)枚舉類

jdk1.5之前使用自定義的方式實(shí)現(xiàn)枚舉類的定義

package enumDemo;
/**
 * user:ypc;
 * date:2021-06-22;
 * time: 18:21;
 * 自定義實(shí)現(xiàn)枚舉類
 */
public class EnumDemo1 {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}
//自定義實(shí)現(xiàn)季節(jié)的枚舉類
class Season {
    //1.首先要求枚舉類是常量,就可以使用 private final 來(lái)修飾
    private final String seasonName;
    private final String seasonDesc;
    //2.常量肯定要賦值,提供私有的構(gòu)造方法來(lái)初始化常量
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //3.枚舉的對(duì)象是有限個(gè)的,確定的。所以要提供對(duì)應(yīng)的枚舉對(duì)象
    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("冬天", "冰天雪地");
    //提供獲取枚舉的屬性的方法
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

在這里插入圖片描述

使用關(guān)鍵字enum定義枚舉類

jdk1.5引入enum關(guān)鍵字

package enumDemo;
import org.junit.Test;
/**
 * user:ypc;
 * date:2021-06-22;
 * time: 18:40;
 * 使用enum關(guān)鍵字來(lái)定義枚舉類
 */
public class EnumDemo2 {
    @Test
    public void test(){
        SeasonEnum spring = SeasonEnum.SPRING;
        System.out.println(spring);
        //枚舉類的父類是
        System.out.println("枚舉類的父類是:"+SeasonEnum.class.getSuperclass().getName());
    }
}
enum SeasonEnum{
    //提供當(dāng)前枚舉類的對(duì)象,之間使用","隔開,最后一個(gè)對(duì)象使用";"隔開
    SPRING("春天","春暖花開"),
    SUMMER("夏天","夏日炎炎"),
    AUTUMN("秋天","秋高氣爽"),
    WINTER("冬天","冰天雪地");

    private final String seasonName;
    private final String seasonDesc;
    private SeasonEnum(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
}

在這里插入圖片描述

Enum的常用方法

package enumDemo;
import org.junit.Test;
/**
 * @author ypc
 * @create 2021-06-22;
 * 枚舉類常用的方法
 */
public class EnumDemo3 {
    @Test
    public void test() {
        //toString方法
        System.out.println(SeasonEnum.SPRING.toString());
        System.out.println("****************************");
        //values方法.
        SeasonEnum[] seasonEnums = SeasonEnum.values();
        System.out.println("季節(jié)枚舉類中的對(duì)象:");
        for (SeasonEnum seasonenum : seasonEnums) {
            System.out.println(seasonenum);
        }
        System.out.println("****************************");
        //線程狀態(tài)中的所有的枚舉的對(duì)象
        Thread.State[] states = Thread.State.values();
        System.out.println("線程狀態(tài)枚舉類中的對(duì)象:");
        for (int i = 0; i < states.length; i++) {
            System.out.println(states[i]);
        }
        System.out.println("****************************");
        //valueOf方法
        SeasonEnum winter = SeasonEnum.valueOf("WINTER");
        System.out.println(winter);
    }
}

在這里插入圖片描述

實(shí)現(xiàn)接口的枚舉類

實(shí)現(xiàn)接口,在枚舉類中實(shí)現(xiàn)抽象方法

interface info {
    void show();
}
enum SeasonEnumImplementsInterface1 implements info {
    //提供當(dāng)前枚舉類的對(duì)象,之間使用","隔開,最后一個(gè)對(duì)象使用";"隔開
    SPRING("春天", "春暖花開"),
    SUMMER("夏天", "夏日炎炎"),
    AUTUMN("秋天", "秋高氣爽"),
    WINTER("冬天", "冰天雪地");

    private final String seasonName;
    private final String seasonDesc;
    private SeasonEnumImplementsInterface1(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    @Override
    public void show() {
        System.out.println("枚舉類實(shí)現(xiàn)了接口的抽象方法");
    }
}

在這里插入圖片描述

讓接口的每個(gè)枚舉對(duì)象都實(shí)現(xiàn)各自的方法

//枚舉的各個(gè)對(duì)象實(shí)現(xiàn)了接口的抽象方法
enum SeasonEnumImplementsInterface2 implements info {
    //提供當(dāng)前枚舉類的對(duì)象,之間使用","隔開,最后一個(gè)對(duì)象使用";"隔開
    SPRING("春天", "春暖花開") {
        @Override
        public void show() {
            System.out.println("春天來(lái)了");
        }
    },
    SUMMER("夏天", "夏日炎炎") {
        @Override
        public void show() {
            System.out.println("夏天到了");
        }
    },
    AUTUMN("秋天", "秋高氣爽") {
        @Override
        public void show() {
            System.out.println("秋天來(lái)了");
        }
    },
    WINTER("冬天", "冰天雪地") {
        @Override
        public void show() {
            System.out.println("冬天來(lái)了");
        }
    };

    private final String seasonName;
    private final String seasonDesc;
    private SeasonEnumImplementsInterface2(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
}

在這里插入圖片描述

public class EnumDemo4 {
    @Test
    public void test1(){
        SeasonEnumImplementsInterface1[] SeasonEnumImplementsInterface1s = SeasonEnumImplementsInterface1.values();
        System.out.println("季節(jié)枚舉類中的對(duì)象:");
        for (SeasonEnumImplementsInterface1 seasonEnumImplementsInterface1:SeasonEnumImplementsInterface1s) {
            System.out.println(seasonEnumImplementsInterface1);
            seasonEnumImplementsInterface1.show();
        }
    }
    @Test
    public void test2(){
        SeasonEnumImplementsInterface2[] SeasonEnumImplementsInterface2s = SeasonEnumImplementsInterface2.values();
        System.out.println("季節(jié)枚舉類中的對(duì)象:");
        for (SeasonEnumImplementsInterface2 seasonEnumImplementsInterface2:SeasonEnumImplementsInterface2s) {
            System.out.println(seasonEnumImplementsInterface2);
            seasonEnumImplementsInterface2.show();
        }
    }
}

注解

注解概述

在Java中,注解(Annotation)引入始于Java5,用來(lái)描述Java代碼的元信息,通常情況下注解不會(huì)直接影響代碼的執(zhí)行,盡管有些注解可以用來(lái)做到影響代碼執(zhí)行。
A

nnotation 其實(shí)就是代碼里的特殊標(biāo)記, 這些標(biāo)記可以在編譯, 類加載, 運(yùn)行時(shí)被讀取, 并執(zhí)行相應(yīng)的處理。通過(guò)使用 Annotation,程序員可以在不改變?cè)壿嫷那闆r下, 在源文件中嵌入一些補(bǔ)充信息。

Annotation可以像修飾符一樣使用,可以用來(lái)修飾包、類、構(gòu)造器、方法、成員變量、參數(shù)、局部變量的聲明,這些信息被保存在Annotation的“name = value”對(duì)中。

在JavaSE中,注解的使用目的比較簡(jiǎn)單,例如標(biāo)記過(guò)時(shí)的功能,忽略警告等。
一定的程度上可以說(shuō)框架 = 注解 + 反射機(jī)制 + 設(shè)計(jì)模式

常見的注解

1.生成文檔相關(guān)的注解

2.在編譯的時(shí)候進(jìn)行格式的檢查

3.跟蹤代碼的依賴性,實(shí)現(xiàn)代替配置文件的功能

package AnnotationDemo;
/**
 * 1.生成文檔相關(guān)的注解
 * @author ypc
 * @create 2021-06-22;
 */
public class AnnotationDemo1 {
}
class B implements A{
    //2.在編譯的時(shí)候進(jìn)行格式的檢查
    @Override
    public void test() {
    }
}
interface A{
    void test();
}
/**
 * 3.跟蹤代碼的依賴性,實(shí)現(xiàn)代替配置文件的功能
 * 未使用注解的時(shí)候
  <servlet>
    <servlet-name>reg</servlet-name>
    <servlet-class>service.RegServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>reg</servlet-name>
    <url-pattern>/reg</url-pattern>
  </servlet-mapping>
 使用注解之后:
 @WebServlet("/reg")
 */

總結(jié)

本篇文章的上半部分就到這里了,希望對(duì)你有所幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringBoot如何通過(guò)自定義注解實(shí)現(xiàn)權(quán)限檢查詳解

    SpringBoot如何通過(guò)自定義注解實(shí)現(xiàn)權(quán)限檢查詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot如何通過(guò)自定義注解實(shí)現(xiàn)權(quán)限檢查的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Javaweb開發(fā)中通過(guò)Servlet生成驗(yàn)證碼圖片

    Javaweb開發(fā)中通過(guò)Servlet生成驗(yàn)證碼圖片

    這篇文章主要為大家詳細(xì)介紹了Javaweb開發(fā)中通過(guò)Servlet生成驗(yàn)證碼圖片的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java線程安全與非線程安全解析

    Java線程安全與非線程安全解析

    這篇文章主要介紹了Java線程安全與非線程安全解析,涉及非線程安全現(xiàn)象模擬以及線程安全的實(shí)現(xiàn)等相關(guān)內(nèi)容,需要的朋友可以參考,一起交流學(xué)習(xí)。
    2017-10-10
  • Java中PageHelper分頁(yè)后對(duì)list操作導(dǎo)致分頁(yè)無(wú)效

    Java中PageHelper分頁(yè)后對(duì)list操作導(dǎo)致分頁(yè)無(wú)效

    在項(xiàng)目中使用分頁(yè)插件的時(shí)候發(fā)現(xiàn)PageHelper插件失效了,本文就來(lái)介紹一下Java中PageHelper分頁(yè)后對(duì)list操作導(dǎo)致分頁(yè)無(wú)效的解決方法,感興趣的可以了解一下
    2021-05-05
  • Java集合之HashMap用法詳解

    Java集合之HashMap用法詳解

    這篇文章主要介紹了Java集合之HashMap用法,結(jié)合實(shí)例形式分析了java map集合中HashMap定義、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • Java interrupt()方法使用實(shí)例介紹

    Java interrupt()方法使用實(shí)例介紹

    一個(gè)線程在未正常結(jié)束之前, 被強(qiáng)制終止是很危險(xiǎn)的事情. 因?yàn)樗赡軒?lái)完全預(yù)料不到的嚴(yán)重后果比如會(huì)帶著自己所持有的鎖而永遠(yuǎn)的休眠,遲遲不歸還鎖等。 所以你看到Thread.suspend, Thread.stop等方法都被Deprecated了
    2023-02-02
  • AbstractQueuedSynchronizer(AQS)鎖狀態(tài)同步和排隊(duì)管理

    AbstractQueuedSynchronizer(AQS)鎖狀態(tài)同步和排隊(duì)管理

    這篇文章主要介紹了為大家AbstractQueuedSynchronizer(AQS)鎖狀態(tài)同步和排隊(duì)管理源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • java.lang.NoClassDefFoundError錯(cuò)誤的原因及解決方法

    java.lang.NoClassDefFoundError錯(cuò)誤的原因及解決方法

    這篇文章主要給大家介紹了關(guān)于java.lang.NoClassDefFoundError錯(cuò)誤的原因及解決的相關(guān)資料,java.lang.NoClassDefFoundError是Java虛擬機(jī)在運(yùn)行時(shí)無(wú)法找到特定類的錯(cuò)誤,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于JAVA11中圖片與BASE64相互轉(zhuǎn)換的實(shí)現(xiàn)

    關(guān)于JAVA11中圖片與BASE64相互轉(zhuǎn)換的實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于JAVA11中圖片與BASE64相互轉(zhuǎn)換的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java無(wú)界阻塞隊(duì)列DelayQueue詳細(xì)解析

    Java無(wú)界阻塞隊(duì)列DelayQueue詳細(xì)解析

    這篇文章主要介紹了Java無(wú)界阻塞隊(duì)列DelayQueue詳細(xì)解析,DelayQueue是一個(gè)支持時(shí)延獲取元素的無(wú)界阻塞隊(duì)列,隊(duì)列使用PriorityQueue來(lái)實(shí)現(xiàn),隊(duì)列中的元素必須實(shí)現(xiàn)Delayed接口,在創(chuàng)建元素時(shí)可以指定多久才能從隊(duì)列中獲取當(dāng)前元素,需要的朋友可以參考下
    2023-12-12

最新評(píng)論