日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-01-18 09:39:36 261觀看
導讀注解注解(Annotation)是JDK5引入的一種代碼輔助工具,其核心作用是對類、方法、變量、參數和包進行標注,通過反射來訪問這些標注信息,以此在運行時改變所注解對象的行為,Java中的注解由內置注解和元注解組成。注解與注釋Ja

注解

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

注解與注釋

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

元注解介紹

創建注解

public @interface [AnnotationName]{}

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

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

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

創建使用注解示例

注解的創建方式:8a428資訊網——每日最新資訊28at.com

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

1.創建注解 @Study8a428資訊網——每日最新資訊28at.com

@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.使用注解8a428資訊網——每日最新資訊28at.com

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

反射

反射(Reflection):在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為Java語言的反射。8a428資訊網——每日最新資訊28at.com

反射的優缺點

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

常用的反射API

方法名8a428資訊網——每日最新資訊28at.com

返回值8a428資訊網——每日最新資訊28at.com

參數描述8a428資訊網——每日最新資訊28at.com

Class.forName()8a428資訊網——每日最新資訊28at.com

獲取類的元信息8a428資訊網——每日最新資訊28at.com

當前類文件的具體位置8a428資訊網——每日最新資訊28at.com

clazz.getClass()8a428資訊網——每日最新資訊28at.com

獲取類的元信息8a428資訊網——每日最新資訊28at.com

8a428資訊網——每日最新資訊28at.com

clazz.getDeclaredFields()8a428資訊網——每日最新資訊28at.com

獲取當前類中的所有屬性8a428資訊網——每日最新資訊28at.com

當前類文件的具體位置8a428資訊網——每日最新資訊28at.com

setAccessible(true)8a428資訊網——每日最新資訊28at.com

設置當前屬性為可見8a428資訊網——每日最新資訊28at.com

true或false8a428資訊網——每日最新資訊28at.com

getMethods()8a428資訊網——每日最新資訊28at.com

獲取類所有方法8a428資訊網——每日最新資訊28at.com

8a428資訊網——每日最新資訊28at.com

invoke(obj)8a428資訊網——每日最新資訊28at.com

通過反射執行方法8a428資訊網——每日最新資訊28at.com

類的元信息8a428資訊網——每日最新資訊28at.com

getAnnotation(class)8a428資訊網——每日最新資訊28at.com

獲取注解8a428資訊網——每日最新資訊28at.com

需要獲取到額注解的Class8a428資訊網——每日最新資訊28at.com

例子

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.html8a428資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-64099-0.htmlJava注解和反射,你學會了嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Gorm 框架原理&amp;源碼解析

下一篇: Jet Brains 2023 開發者生態系統現狀

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 《英雄聯盟》夏季賽總決賽今日開打!JDG對陣LNG首發名單來了 Knight:準備三連冠

    8月5日消息,今日17:00,《英雄聯盟》2023LPL夏季賽總決賽將正式開打,由JDG對陣LNG。對兩支隊伍來說,這場比賽不僅要爭奪夏季賽冠軍,更要決定誰才是LPL賽區一
  • 消息稱迪士尼要拍真人版《魔發奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實有點忙,忙著將不少動畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發奇緣》也在路上了。據外媒消息稱,迪士尼將打造真人版
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起&ldquo;馮提莫&rdquo;這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久久欧美精品| 亚洲高清视频在线| 欧美吻胸吃奶大尺度电影| 欧美亚州一区二区三区 | 欧美sm重口味系列视频在线观看| 欧美黑人在线播放| 欧美亚韩一区| 加勒比av一区二区| 9l国产精品久久久久麻豆| 午夜视频久久久| 欧美国产精品| 国产欧美短视频| 91久久久在线| 午夜精品电影| 欧美凹凸一区二区三区视频| 国产精品久久久久免费a∨| 精品99视频| 亚洲夜晚福利在线观看| 免费视频一区| 国产三级欧美三级| 亚洲精选在线| 久久久www成人免费无遮挡大片| 欧美日韩精品欧美日韩精品| 韩日精品视频一区| 亚洲午夜日本在线观看| 久久先锋影音| 国产精品你懂的在线| 亚洲国产欧美国产综合一区| 亚洲欧美区自拍先锋| 欧美国产在线观看| 狠狠色丁香婷婷综合| 亚洲一区二区三区四区视频| 欧美激情第一页xxx| 国产一区二区三区日韩| 亚洲天堂网站在线观看视频| 牛人盗摄一区二区三区视频| 国产日韩精品一区二区三区在线| 日韩一级在线| 蜜臀av国产精品久久久久| 国产欧美日韩免费看aⅴ视频| 亚洲免费高清| 久久久最新网址| 国产日韩精品一区二区三区| 亚洲视频在线观看网站| 免费高清在线一区| 国产一区二区精品丝袜| 亚洲一区二区三区精品动漫| 欧美成熟视频| 精品91免费| 欧美中文日韩| 国产精品一区二区久久国产| 亚洲图片欧美午夜| 欧美日韩小视频| 亚洲日本激情| 欧美成人精品1314www| 黄色av成人| 久久精品国产999大香线蕉| 国产精品区一区二区三区| 一区二区日韩欧美| 欧美人与禽性xxxxx杂性| 亚洲国产第一| 麻豆国产va免费精品高清在线| 黄色成人免费网站| 久久精品视频免费观看| 国产私拍一区| 久久er99精品| 韩日欧美一区二区三区| 久久国产精品99久久久久久老狼| 国产精品拍天天在线| 亚洲愉拍自拍另类高清精品| 国产精品hd| 亚洲一区亚洲| 国产精品美女999| 亚洲一区不卡| 国产精品免费区二区三区观看| 亚洲一区二区三区免费视频| 国产精品毛片a∨一区二区三区| 亚洲一级免费视频| 国产精品国产三级国产专播品爱网 | 久久精品人人做人人综合| 国产欧美精品在线| 欧美亚洲一区二区三区| 国产亚洲成av人在线观看导航| 欧美在线电影| 狠狠久久亚洲欧美| 久久一区二区三区四区| 1000精品久久久久久久久| 免费观看久久久4p| 亚洲美女在线观看| 国产精品大片wwwwww| 午夜精品福利在线观看| 国产一区二区三区奇米久涩 | 欧美一进一出视频| 国产自产精品| 免费亚洲婷婷| 夜夜爽夜夜爽精品视频| 国产精品jizz在线观看美国| 亚洲欧美日本在线| 国产一级精品aaaaa看| 久久亚洲不卡| 亚洲精品在线免费| 国产精品成人国产乱一区| 欧美亚洲在线播放| 激情丁香综合| 欧美精品麻豆| 亚洲专区在线视频| 国内不卡一区二区三区| 蜜桃久久av一区| 99re6热只有精品免费观看| 欧美色视频在线| 欧美在线日韩在线| 亚洲国产日韩在线| 国产精品99免视看9| 久久精品国产99精品国产亚洲性色| 在线成人中文字幕| 欧美日韩免费看| 欧美亚洲免费在线| 亚洲国产精品毛片| 国产精品高潮在线| 久久久久.com| 99视频精品在线| 国产日韩欧美在线看| 欧美jizz19性欧美| 亚洲一区二区三区中文字幕在线 | 狠狠色丁香婷综合久久| 欧美精品一区二区在线观看| 午夜亚洲精品| 91久久国产综合久久蜜月精品 | 洋洋av久久久久久久一区| 国产免费成人| 欧美成人中文| 性欧美1819sex性高清| 亚洲国产成人av好男人在线观看| 国产精品成人一区二区三区夜夜夜 | 久久久亚洲国产天美传媒修理工| 亚洲精品五月天| 国产亚洲视频在线观看| 欧美另类人妖| 久久手机精品视频| 亚洲一线二线三线久久久| 在线观看欧美一区| 国产精品久久久久久户外露出| 免费观看成人www动漫视频| 亚洲欧美激情一区| 在线观看中文字幕不卡| 国产精品卡一卡二卡三| 欧美成人亚洲| 久久福利毛片| 亚洲网站视频| 亚洲黄色尤物视频| 国产一区免费视频| 国产精品第一区| 欧美黄免费看| 久久色在线观看| 性久久久久久| 夜久久久久久| 亚洲福利国产| 国产一区二区三区久久久| 欧美视频一区二| 欧美国产1区2区| 久久婷婷久久| 欧美影片第一页| aa成人免费视频| 在线观看国产精品网站| 国产欧美日韩中文字幕在线| 欧美婷婷六月丁香综合色| 欧美高清视频| 欧美成人第一页| 老巨人导航500精品| 欧美中文字幕在线视频| 亚洲永久在线| 亚洲图片欧洲图片av| 日韩一级精品| 亚洲精品视频在线| 亚洲丰满在线| 伊伊综合在线| 一区二区三区在线观看欧美| 国产偷久久久精品专区| 国产精品久久网站| 欧美天堂在线观看| 欧美日产国产成人免费图片| 欧美二区在线| 欧美xx69| 欧美黄色精品| 欧美连裤袜在线视频| 欧美v日韩v国产v| 农夫在线精品视频免费观看| 久久综合色播五月| 久久一区精品| 久久婷婷av| 欧美v亚洲v综合ⅴ国产v| 久久在线免费视频| 久热精品在线| 噜噜噜躁狠狠躁狠狠精品视频| 久久性色av| 可以免费看不卡的av网站| 久久综合激情| 免费一级欧美片在线播放| 美女图片一区二区| 欧美v国产在线一区二区三区| 欧美成人午夜激情视频| 欧美ab在线视频| 欧美激情一区二区三区在线| 欧美激情无毛|