註解和反射的簡單學習

来源:https://www.cnblogs.com/clove00/archive/2020/06/08/13067391.html
-Advertisement-
Play Games

以前對於這兩個概念其實沒有多少認識,只知道註解是標記,對於反射的印象就是類比於游戲進度的回顯吧,慚愧慚愧~~~學習後有了一些更深入的瞭解,記錄一下,加深印象。 註解(Annotation) 什麼是註解? 是 JDK5.0 引入的一種註釋機制,代碼輔助工具,由內置註解和元註解組成。核心作用是對類、方法 ...


以前對於這兩個概念其實沒有多少認識,只知道註解是標記,對於反射的印象就是類比於游戲進度的回顯吧,慚愧慚愧~~~學習後有了一些更深入的瞭解,記錄一下,加深印象。

註解(Annotation)

  1. 什麼是註解?

    是 JDK5.0 引入的一種註釋機制,代碼輔助工具,由內置註解和元註解組成。核心作用是對類、方法、變數、參數和包進行標註,通過反射來訪問標註信息,以此在運行中改變標註對象的行為。
  2. 內置註解

    @Override(重寫方法):被用於標註方法,用於說明所標註的方法是重寫父類的方法

    @Deprecated(過時方法):用於說明所標註元素,因存在安全問題或有更好選擇而不鼓勵使用,如果強行使用,則編譯器會發出警告

    @SuppressWarnings(消除警告):用於取消編輯器所顯示的警告,有如下屬性值

    @SafeVarargs(消除泛型警告) : Java 7 開始支持,忽略任何使用參數為泛型變數的方法或構造函數調用產生的警告

    @FunctionalInterface (標記函數): Java 8 開始支持,標識一個匿名函數或函數式介面

    @Repeatable(多次聲明) : Java 8 開始支持,標識某註解可以在同一個聲明上使用多次

  3. 元註解:java提供了四個用於修飾自定義註解的元註解

    @Target:用於指定被修飾的自定義註解只能用於修飾程式中哪些元素

         ElemenetType.CONSTRUCTOR:構造器聲明       
         ElemenetType.LOCAL_VARIABLE:局部變數聲明      
         ElemenetType.PACKAGE:包聲明 
         ElemenetType.PARAMETER :參數聲明 
         ElemenetType.METHOD :方法聲明 
         ElemenetType.FIELD:全局屬性聲明(包括 enum 實例)
         ElemenetType.TYPE:類,介面(包括註解類型)或enum聲明 

    @Retention:用於指定被修飾的自定義註解可以保留多久,有三個常用屬性
        RetentionPolicy.SOURCE:在源文件中有效(即源文件保留)
        RetentionPolicy.CLASS:在class文件中有效(即class保留)
        RetentionPolicy.RUNTIME:在運行時有效(即運行時保留)   

    @Documented:執行javadoc命令時,被該元註解修飾的自定義註解也會生成在文檔中

    @Inherited:如果父類所使用的註解有此修飾,則子類可以繼承該註解,否則不能

  4. 自定義註解實例

    1 @Target({ElementType.FIELD,ElementType.TYPE})//可修飾屬性和類
    2 @Retention(RetentionPolicy.RUNTIME)//運行時
    3 public @interface RefStudy {
    4 
    5     String name() default "a";
    6     String[] mores();
    7 }

 

反射(reflection) 

  1.  反射是什麼?
    運行過程中,對於任意類,都能知道類的所有屬性和方法;對弈任意對象,都能調用它的方法和屬性。這種動態獲取的信息以及動態調用對象的方法的功能稱為Java語言的反射。
  2. 反射的優缺點
    • 反射提高了程式的靈活性和擴展性,降低耦合性,提高自適應能力
    • 它允許程式創建和控制任何類的對象,無需提前硬編碼目標類
    • 反射會對性能造成一定的影響,同時讓代碼的可讀性變低
  3. 常用方法
    方法名 返回值 參數描述
    Class.forName(String) 類的元信息 類文件的具體位置
    類.getClass() 類的元信息  
    clz.getDeclaredFields() 類中的所有屬性  
    getMethods() 類的所有方法  
    invoke(obj) 通過反射執行方法 類的元信息
    getAnnotation(class) 註解 類的Class
    setAccessible(true) 設置當前屬性為可見 true或者false
    clz.newInstance() 類的實例對象  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 註意:一定要跟著博主的解說再看代碼的中文註釋及其下麵的一行代碼!!! 說到api版本控制,就是我們的前端人員請求的後臺介面可能有多個版本,後臺的介面地址一般是有兩種形式,博主現以這兩種形式逐一解釋api版本控制組件的源碼剖析。 第一種api版本控制的url格式一般是:http://localhost ...
  • 一、數組 數組也是一種引用類型,其父類是Object,使用“數據類型[]”聲明,如“int[] array”表示聲明瞭一個元素類型為int類型的數組array。 數組初始化語法: // 靜態初始化語法,即定義的時候就初始化好了所有的元素 int[] array1 = {100, 55, 30}; / ...
  • 22. 常用內置模塊 22.1 random模塊 隨機數據可以用於數學、測試、安全、演算法等領域中。內置random模塊,可用於生成偽隨機數。 真正意義上的隨機數或隨機事件是在某次產生過程中是按照實驗過程中表現的分佈概率隨機產生的,其結果是不可預測的,不可見的。而電腦中的隨機函數是按一定的演算法模擬產 ...
  • 所有知識體系文章,GitHub已收錄,歡迎Star!再次感謝,願你早日進入大廠! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual 深入理解Java枚舉 一、什麼是枚舉 1.1 什麼是枚舉? 至於枚舉,我們先拿生活中的枚舉來入手,然 ...
  • 現在需要啟動一個selenium的爬蟲,使用火狐驅動+多線程,大家都明白的,現在電腦管家顯示CPU占用率20%,啟動selenium後不停的開啟瀏覽器+多線程, 好,沒過5分鐘,CPU占用率直接拉到90%+,電腦卡到飛起,定時程式雖然還在運行,但是已經類似於待機狀態, 很多人學習python,不知道 ...
  • 1. 線程概述 1.1 線程和進程 進程是處於運行過程中的程式,並且具有一定的獨立功能 併發性:同一個時刻只能有一條指令執行,但多個進程指令被快速輪換執行 並行:多條指令在多個處理器上同時執行 線程是進程的執行單元 1.2 多線程的優勢 進程之間不能共用記憶體,但線程之間非常容易 系統創建進程時需要為 ...
  • 1、生成配置文件 ''' 生成配置文件 很多人學習python,不知道從何學起。很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。很多已經做案例的人,卻不知道如何去學習更加高深的知識。那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!Q ...
  • 21 反射 21.1 反射概念 反射主要是指程式可以訪問、檢測和修改其本身狀態或行為的一種能力。在Python中最重要的4個方法如下所示: getattr:獲取指定字元串名稱的對象屬性 setattr:給對象添加類屬性 hasattr:判斷對象是否存在某個對應的對象 delattr:刪除指定的屬性 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...