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

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

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

枚舉

什么是枚舉?

枚舉的字面意思就是 一一列舉出來

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

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

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

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

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

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

枚舉類的實現(xiàn)

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

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

package enumDemo;
/**
 * user:ypc;
 * date:2021-06-22;
 * time: 18:21;
 * 自定義實現(xiàn)枚舉類
 */
public class EnumDemo1 {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}
//自定義實現(xiàn)季節(jié)的枚舉類
class Season {
    //1.首先要求枚舉類是常量,就可以使用 private final 來修飾
    private final String seasonName;
    private final String seasonDesc;
    //2.常量肯定要賦值,提供私有的構(gòu)造方法來初始化常量
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //3.枚舉的對象是有限個的,確定的。所以要提供對應(yīng)的枚舉對象
    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)鍵字來定義枚舉類
 */
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)前枚舉類的對象,之間使用","隔開,最后一個對象使用";"隔開
    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é)枚舉類中的對象:");
        for (SeasonEnum seasonenum : seasonEnums) {
            System.out.println(seasonenum);
        }
        System.out.println("****************************");
        //線程狀態(tài)中的所有的枚舉的對象
        Thread.State[] states = Thread.State.values();
        System.out.println("線程狀態(tài)枚舉類中的對象:");
        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);
    }
}

在這里插入圖片描述

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

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

interface info {
    void show();
}
enum SeasonEnumImplementsInterface1 implements info {
    //提供當(dāng)前枚舉類的對象,之間使用","隔開,最后一個對象使用";"隔開
    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("枚舉類實現(xiàn)了接口的抽象方法");
    }
}

在這里插入圖片描述

讓接口的每個枚舉對象都實現(xiàn)各自的方法

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

    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é)枚舉類中的對象:");
        for (SeasonEnumImplementsInterface1 seasonEnumImplementsInterface1:SeasonEnumImplementsInterface1s) {
            System.out.println(seasonEnumImplementsInterface1);
            seasonEnumImplementsInterface1.show();
        }
    }
    @Test
    public void test2(){
        SeasonEnumImplementsInterface2[] SeasonEnumImplementsInterface2s = SeasonEnumImplementsInterface2.values();
        System.out.println("季節(jié)枚舉類中的對象:");
        for (SeasonEnumImplementsInterface2 seasonEnumImplementsInterface2:SeasonEnumImplementsInterface2s) {
            System.out.println(seasonEnumImplementsInterface2);
            seasonEnumImplementsInterface2.show();
        }
    }
}

注解

注解概述

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

nnotation 其實就是代碼里的特殊標記, 這些標記可以在編譯, 類加載, 運行時被讀取, 并執(zhí)行相應(yīng)的處理。通過使用 Annotation,程序員可以在不改變原邏輯的情況下, 在源文件中嵌入一些補充信息。

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

在JavaSE中,注解的使用目的比較簡單,例如標記過時的功能,忽略警告等。
一定的程度上可以說框架 = 注解 + 反射機制 + 設(shè)計模式

常見的注解

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

2.在編譯的時候進行格式的檢查

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

package AnnotationDemo;
/**
 * 1.生成文檔相關(guān)的注解
 * @author ypc
 * @create 2021-06-22;
 */
public class AnnotationDemo1 {
}
class B implements A{
    //2.在編譯的時候進行格式的檢查
    @Override
    public void test() {
    }
}
interface A{
    void test();
}
/**
 * 3.跟蹤代碼的依賴性,實現(xiàn)代替配置文件的功能
 * 未使用注解的時候
  <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é)

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

相關(guān)文章

  • Spring中@Transactional(rollbackFor=Exception.class)屬性用法介紹

    Spring中@Transactional(rollbackFor=Exception.class)屬性用法介紹

    這篇文章介紹了Spring中@Transactional(rollbackFor=Exception.class)屬性的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • java利用delayedQueue實現(xiàn)本地的延遲隊列

    java利用delayedQueue實現(xiàn)本地的延遲隊列

    這篇文章主要給大家介紹了java利用delayedQueue實現(xiàn)本地的延遲隊列的相關(guān)資料,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • 使用maven打包生成doc文檔和打包源碼

    使用maven打包生成doc文檔和打包源碼

    這篇文章主要介紹了使用maven打包生成doc文檔和打包源碼的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java實現(xiàn)時間與字符串互相轉(zhuǎn)換詳解

    Java實現(xiàn)時間與字符串互相轉(zhuǎn)換詳解

    這篇文章主要為大家詳細介紹了Java中實現(xiàn)時間與字符串互相轉(zhuǎn)換的相關(guān)方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Java基于Swing和netty實現(xiàn)仿QQ界面聊天小項目

    Java基于Swing和netty實現(xiàn)仿QQ界面聊天小項目

    這篇文章主要為大家詳細介紹了Java如何利用Swing和netty實現(xiàn)仿QQ界面聊天小項目,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-09-09
  • SpringMVC的自定義攔截器詳解

    SpringMVC的自定義攔截器詳解

    這篇文章主要介紹了SpringMVC的自定義攔截器詳解,攔截器只會攔截訪問的控制器方法, 如果訪問的是jsp/html/css/image/js是不會進行攔截的,需要的朋友可以參考下
    2023-07-07
  • Java中CyclicBarrier?循環(huán)屏障

    Java中CyclicBarrier?循環(huán)屏障

    這篇文章主要介紹了Java中CyclicBarrier?循環(huán)屏障,可以實現(xiàn)讓一組線程等待至某個狀態(tài)屏障點之后再全部同時執(zhí)行,下面文章分享CyclicBarrier循環(huán)屏障的原理,需要的小伙伴可以參考一下
    2022-05-05
  • Java swing實現(xiàn)的計算器功能完整實例

    Java swing實現(xiàn)的計算器功能完整實例

    這篇文章主要介紹了Java swing實現(xiàn)的計算器功能,結(jié)合完整實例形式分析了java基于swing組件實現(xiàn)計算器布局與運算功能的具體操作技巧,需要的朋友可以參考下
    2017-12-12
  • Feign遠程調(diào)用參數(shù)里面內(nèi)容丟失的解決方案

    Feign遠程調(diào)用參數(shù)里面內(nèi)容丟失的解決方案

    這篇文章主要介紹了Feign遠程調(diào)用參數(shù)里面內(nèi)容丟失的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java數(shù)據(jù)結(jié)構(gòu)與算法之二分查找詳解

    Java數(shù)據(jù)結(jié)構(gòu)與算法之二分查找詳解

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法之二分查找詳解,二分查找算法是一種在有序數(shù)組中查找某一特定元素的搜索算法,其思想就是不斷地將有序查找表“一分為二”,逐漸縮小搜索區(qū)域,進而找到目標元素,需要的朋友可以參考下
    2023-12-12

最新評論

界首市| 奉化市| 九寨沟县| 凭祥市| 三台县| 原阳县| 盐源县| 黎城县| 黔西县| 尉氏县| 湘潭市| 宁南县| 宝鸡市| 徐汇区| 新泰市| 安塞县| 蒙山县| 澄江县| 洱源县| 敦煌市| 平顺县| 酒泉市| 什邡市| 吉隆县| 休宁县| 包头市| 青神县| 勐海县| 克山县| 连南| 巴马| 电白县| 舟山市| 宣化县| 巫山县| 东台市| 平安县| 荔浦县| 壶关县| 鹤峰县| 黔南|