国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Java注解和反射,你學會了嗎?

開發 前端
注解(Annotation)是JDK5引入的一種代碼輔助工具,其核心作用是對類、方法、變量、參數和包進行標注,通過反射來訪問這些標注信息,以此在運行時改變所注解對象的行為,Java中的注解由內置注解和元注解組成。

注解

注解(Annotation)是JDK5引入的一種代碼輔助工具,其核心作用是對類、方法、變量、參數和包進行標注,通過反射來訪問這些標注信息,以此在運行時改變所注解對象的行為,Java中的注解由內置注解和元注解組成。

注解與注釋

  • Java注解又稱之為Java標注,是JDK5開始支持加入源代碼的特殊語法元數據
  • 普通的注釋在編譯后的class文件中是不存在的,而注解附加的信息則根據需要可以保存到class文件中,甚至運行期加載的class對象中

元注解介紹

創建注解

public @interface [AnnotationName]{}

元注解(描述注解的一種方式)

1.@Retention 定義注解的生命周期(source、class、runtime)
2.@Documented 文檔注解,會被javadoc工具文檔化
3.@Inherited 是否讓子類繼承該注解
4.@Target 描述注解的應用范圍,可選內容如下所示:

  • TYPE:可以用來修飾類、接口、注解類型或枚舉類型
  • PACKAGE:可以用來修飾包
  • PARAMETER:可以用來修飾參數
  • ANNOTATION_TYPE:可以用來修飾注解類型
  • METHOD:可以用來修飾屬性
  • FIELD:可以用來修飾屬性(包括枚舉常量)
  • CONSTRUCTOR:可以用來修飾構造器
  • LOCAL_VARIABLE:可以用來修飾局部變量

創建使用注解示例

注解的創建方式:

  1. 配置元注解,由元注解來聲明當前注解的作為范圍和聲明周期。
  2. 注解中如果需要添加信息,可以用以上方式添加。
  3. 注解信息支持java的基本數據結構。

1.創建注解 @Study

@Target({ElementType.FIELD, ElementType.TYPE}) // 元注解,定義注解的修飾范圍,可以設置多個
@Retention(RetentionPolicy.RUNTIME) // 元注解,定義注解的聲明周期
public @interface Study { // 注解內容可以設置值,也可以不設置值

    // 其中的屬性是支持JAVA的八大屬性的 byte、short、int、long、float、double、boolean、char
    // 如果屬性為value,那么使用時,賦值可以不寫 "value ="

    String name() default "Neco Deng"; // 表示定義了一個name屬性,并且設置了默認值為Neco Deng

    String[] mores(); // 表示定義了一個名字為mores的字符串數組屬性,并且沒有默認值,即該屬性需要顯示定義
}

2.使用注解

@Study(mores = {"first", "second"}) // 在類上使用注解,這里必須定義mores, 不然會報錯
public class Person {

    private int id;

    @Study(mores = {"first", "second"}) // 在屬性上使用注解,這里必須定義mores, 不然會報錯
    private String name;

}

反射

反射(Reflection):在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為Java語言的反射。

反射的優缺點

  • 通過反射可以使程序代碼訪問裝載到JVM中的類的內部信息,獲取已裝載類的屬性信息,獲取已裝載類的方法,獲取已裝載類的構造方法信息。
  • 反射提供了JAVA程序的靈活性和擴展性,降低耦合性,提高自適應能力。
  • 反射會對性能造成一定的影響,同時讓代碼的可讀性變低。

常用的反射API

方法名

返回值

參數描述

Class.forName()

獲取類的元信息

當前類文件的具體位置

clazz.getClass()

獲取類的元信息

clazz.getDeclaredFields()

獲取當前類中的所有屬性

當前類文件的具體位置

setAccessible(true)

設置當前屬性為可見

true或false

getMethods()

獲取類所有方法

invoke(obj)

通過反射執行方法

類的元信息

getAnnotation(class)

獲取注解

需要獲取到額注解的Class

例子

public class ReflectionDemo {


    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException,
            InstantiationException, NoSuchMethodException, InvocationTargetException {
        // 實例1:通過反射獲取到Class元信息
        Person person = new Person();
        Class<? extends Person> aClass1 = person.getClass(); // 通過getClass獲取元信息
        Class<?> aClass2 = Class.forName("com.model.Person"); // 通過forName獲取元信息

        // 實例2:通過反射獲取類名,包名
        String name = aClass1.getName(); // 全路徑類名 > cn.lazyfennec.model.Person
        String simpleName = aClass1.getSimpleName(); // 不包含路徑 > Person
        Package aPackage = aClass1.getPackage(); // 包名 > package cn.lazyfennec.model
        System.out.println(name);
        System.out.println(simpleName);
        System.out.println(aPackage);
        System.out.println("===============================");

        // 實例3:獲取類屬性
        Field[] declaredFields = aClass1.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }

        // 實例4:獲取類屬性的具體的值
        person.setId(1);
        person.setName("Neco");
        for (Field declaredField : declaredFields) {
            declaredField.setAccessible(true); // 設置屬性可見可訪問,處理私有屬性無法訪問的問題
            System.out.println(declaredField.get(person));
        }

        // 實例4的另一種寫法,只是簡單的寫法,可以進行優化
        Object obj = aClass1.newInstance(); // 實例化一個新的對象, 相當于反射中的實例化
        declaredFields = obj.getClass().getDeclaredFields();
        for (Field declaredField : declaredFields) {
            declaredField.setAccessible(true);
            if (declaredField.getName().equals("name")) {
                declaredField.set(obj, "Neco");
            } else {
                declaredField.set(obj, 1);
            }
            System.out.println(declaredField.get(obj));
        }

        // 實例5:反射獲取當前類的方法
        Method[] methods = aClass1.getMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
        }
        Method method = aClass1.getMethod("getString");
        Object invoke = method.invoke(obj);
        System.out.println(invoke);

        // 實例6:反射獲得注解
        Study study = aClass1.getAnnotation(Study.class); // 從類中獲取注解
        System.out.println(study);
        String[] mores = study.mores();
        String name1 = study.name();
        System.out.println("name: " + name1 + " mores: " + mores);
        // 從方法上獲取注解
        methods = aClass1.getDeclaredMethods();
        for (Method method1 : methods) {
            Study annotation = method1.getAnnotation(Study.class);
            if (annotation == null) continue;
            String name2 = annotation.name();
            String[] mores1 = annotation.mores();
            System.out.println("name: " + name2 + " mores: " + mores1);
        }
        // 從屬性上獲取注解
        declaredFields = aClass1.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            Study annotation = declaredField.getAnnotation(Study.class);
            if (annotation == null) continue;
            String annotationName = annotation.name();
            String[] annotationMores = annotation.mores();
            System.out.println("name: " + annotationName + " mores: " + annotationMores);
        }
    }
}

參考

https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/index.html

責任編輯:武曉燕 來源: 沐雨花飛蝶
相關推薦

2024-11-08 08:56:01

2022-08-29 08:05:44

Go類型JSON

2024-01-19 08:25:38

死鎖Java通信

2022-12-22 08:14:54

2024-10-09 07:40:43

2024-04-28 08:24:27

分布式架構Istio

2023-07-10 08:36:21

工具pptword

2022-09-26 11:03:25

Java反射漏洞

2023-01-10 08:43:15

定義DDD架構

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2024-01-02 12:05:26

Java并發編程

2023-08-01 12:51:18

WebGPT機器學習模型

2023-01-28 09:50:17

java多線程代碼

2022-11-21 16:57:20

2024-07-31 08:39:45

Git命令暫存區

2024-05-06 00:00:00

InnoDBView隔離

2023-12-12 08:02:10

2023-01-30 09:01:54

圖表指南圖形化

2022-07-08 09:27:48

CSSIFC模型
點贊
收藏

51CTO技術棧公眾號

久久免费视频在线| 国产福利91精品| 自拍偷拍欧美视频| 黄动漫在线免费观看| 一区二区三区四区视频在线 | 日韩精品视频三区| 一区二区不卡在线视频 午夜欧美不卡在| 国产米奇在线777精品观看| 亚洲国产老妈| 欧美国产美女| 国产精品视屏| caoporn成人免费视频在线| 天堂中文av在线资源库| 好吊日av在线| 色呦呦在线看| 激情网站在线| 国产一二三在线| 爱啪啪综合导航| 在线能看的av网址| 日本欧美不卡| 免费看av不卡| 欧美videos粗暴| 亚洲精品aaa| 成午夜精品一区二区三区软件| 欧美日韩国产观看视频| 天堂久久午夜av| 福利一区二区三区视频在线观看| 成人免费看黄| 日韩一区二区三区在线看| 51社区在线成人免费视频| www.国产精品一区| 精品国产一区一区二区三亚瑟| 国产乱码精品一区二区亚洲| 精品视频亚洲| 欧美精品日韩| 国产精品一区二区久久精品爱涩 | 人猿泰山h版在线观看| 一二三四社区在线视频6| av在线女优影院| 中文字幕在线中文字幕在线中三区| 欧美va在线观看| 欧美黑人巨大videos精品| 欧美一区二区三区高清视频| 激情自拍一区| 99久久免费国产| 亚洲一二三专区| 日韩视频免费观看高清在线视频| 国产一区二区三区视频| 欧美在线一级视频| 国产区一区二区三区| 国产乱子伦精品无码专区| 日本高清视频网站www| 色戒汤唯在线| 日韩精品中文字幕第1页| 美美哒免费高清在线观看视频一区二区 | 琪琪一区二区三区| 国产精品美女久久久久久2018 | 欧美日韩一区 二区 三区 久久精品| 精品亚洲一区二区三区在线播放 | 99re视频这里只有精品| 欧美午夜片在线免费观看| 日韩精品免费一线在线观看| 亲爱的老师9免费观看全集电视剧| 色噜噜狠狠色综合网| 成人福利网址| 岛国av在线播放| 欧美日韩三区| 国产精品的网站| 亚洲男人天天操| 国产精品免费看一区二区三区| www.99热这里只有精品| 国产在线高潮| 欧美亚洲国产激情| 日韩一区有码在线| 亚洲偷熟乱区亚洲香蕉av| 国产女人水真多18毛片18精品 | 成人av视屏| 成人自拍视频| 日韩成人dvd| 欧美视频第一页| 欧美在线视频一二三| 青青草成人免费在线视频| 成人在线观看亚洲| 国产视频一区欧美| 日韩欧亚中文在线| 国产精品久久999| 久久久精品三级| 91精品xxx在线观看| 日本人妖一区二区| 亚洲成av人片在线观看香蕉| 国产偷久久久精品专区| 亚洲欧美国产一本综合首页| 嫩草香蕉在线91一二三区| 99这里只有精品视频| 懂色av中文一区二区三区| 91精品国产一区二区三区香蕉| 成人久久精品视频| 伊人春色在线| 91亚洲一区| 精品动漫一区二区三区| 国产原创欧美精品| 日本1级在线| 欧美黄色大片网站| 日本韩国欧美一区二区三区| 成人妇女免费播放久久久| 一二三区在线观看| 欧美欧美全黄| 日韩欧美第一区| 日韩一区免费观看| 日韩av影片| 国产三级精品视频| 国产精品久久久久久久久久久新郎| 午夜视频免费在线观看| 欧美成熟视频| 亚洲国产精品福利| 精品无码一区二区三区在线| 一区二区在线视频观看| 亚洲成a人v欧美综合天堂| 亚洲一区国产精品| 超碰免费公开在线| 成人丝袜高跟foot| 国外成人性视频| 在线黄色.com| 麻豆一区二区99久久久久| 国产一区二区成人| 国产国语**毛片高清视频| 99亚洲一区二区| 国产亚洲精品久久| 日本福利视频| 久久99久国产精品黄毛片色诱| 欧美成人免费全部观看天天性色| 天堂中文资源在线| 国产.欧美.日韩| 成人黄色免费片| 91另类视频| 亚洲成av人片在www色猫咪| 午夜一区二区三视频在线观看| 国内露脸中年夫妇交换精品| 日本福利一区二区| 亚洲一区二区蜜桃| 在线一区欧美| 午夜精品美女自拍福到在线| 四虎av在线| 色噜噜夜夜夜综合网| 日韩视频免费播放| 久久综合狠狠| 国产伊人精品在线| 日本在线视频一区二区三区| 欧美一区三区二区| 亚洲色图另类色图| 亚洲国产精品黑人久久久 | 青青草原成人在线视频| 主播大秀视频在线观看一区二区| 欧美日韩一区二区三区在线免费观看| 日韩有码免费视频| 国产精品资源在线看| 9a蜜桃久久久久久免费| 精品国产一区二区三区小蝌蚪| 久久九九免费视频| 欧美13videosex性极品| 欧美日韩一区二区在线观看| 2020中文字幕在线播放| 亚洲视频在线一区| 虎白女粉嫩尤物福利视频| 成人一区二区三区在线观看| 免费h精品视频在线播放| 黑丝一区二区三区| 成人国产精品色哟哟| 亚洲天堂网站| 久久亚洲国产成人| 久久精品九色| 日韩中文综合网| 在线观看亚洲精品福利片| 尤物99国产成人精品视频| 都市激情亚洲综合| 一区二区三区www| 六九午夜精品视频| 欧美精品性视频| 9l亚洲国产成人精品一区二三| 欧美激情免费在线| 亚洲国产aⅴ精品一区二区| 中文字幕亚洲自拍| 999在线精品| 日韩av电影手机在线观看| 91久久夜色精品国产按摩| 91传媒视频在线观看| 亚洲永久在线| 影音先锋男人的网站| 国产一区二区中文字幕| 一本大道熟女人妻中文字幕在线 | 日本欧美在线视频| 国产精品二区不卡| 国产一区二区在线观看免费播放| 中文高清一区| 成人午夜免费在线视频| 中文一区在线播放| 国产在线视频资源| 亚洲欧美日韩天堂| 日韩欧美美女在线观看| 国产欧美日韩伦理|