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

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

面試官:說說反射的底層實現原理?

來源: 責編: 時間:2024-03-18 09:41:47 169觀看
導讀反射是 Java 面試中必問的面試題,但只有很少人能真正的理解“反射”并講明白反射,更別說能說清楚它的底層實現原理了。所以本文就通過大白話的方式來系統的講解一下反射,希望大家看完之后能真正的理解并掌握“反射”這項

1aK28資訊網——每日最新資訊28at.com

反射是 Java 面試中必問的面試題,但只有很少人能真正的理解“反射”并講明白反射,更別說能說清楚它的底層實現原理了。所以本文就通過大白話的方式來系統的講解一下反射,希望大家看完之后能真正的理解并掌握“反射”這項技術。1aK28資訊網——每日最新資訊28at.com

1.什么是反射?

反射在程序運行期間動態獲取類和操縱類的一種技術。1aK28資訊網——每日最新資訊28at.com

2.反射的應用有哪些?

反射在日常開發中使用的地方有很多,例如以下幾個:1aK28資訊網——每日最新資訊28at.com

  • 動態代理:反射是動態代理的底層實現,即在運行時動態地創建代理對象,并攔截和增強方法調用。這常用于實現 AOP 功能,如日志記錄、事務管理等。
  • Bean 創建:Spring/Spring Boot 項目中,在項目啟動時,創建的 Bean 對象就是通過反射來實現的。
  • JDBC 連接:JDBC 中的 DriverManager 類通過反射加載并注冊數據庫驅動,這是 Java 數據庫連接的標準做法。

3.反射實現

反射的關鍵實現方法有以下幾個:1aK28資訊網——每日最新資訊28at.com

  • 得到類:Class.forName("類名")
  • 得到所有字段:getDeclaredFields()
  • 得到所有方法:getDeclaredMethods()
  • 得到構造方法:getDeclaredConstructor()
  • 得到實例:newInstance()
  • 調用方法:invoke()

具體使用示例如下:1aK28資訊網——每日最新資訊28at.com

// 1.反射得到對象Class<?> clazz = Class.forName("User");// 2.得到方法Method method = clazz.getDeclaredMethod("publicMethod");// 3.得到靜態方法Method staticMethod = clazz.getDeclaredMethod("staticMethod");// 4.執行靜態方法staticMethod.invoke(clazz);

反射執行私有方法代碼實現如下:1aK28資訊網——每日最新資訊28at.com

// 1.反射得到對象Class<?> clazz = Class.forName("User");// 2.得到私有方法Method privateMethod = clazz.getDeclaredMethod("privateMethod");// 3.設置私有方法可訪問privateMethod.setAccessible(true);// 4.得到實例Object user = clazz.getDeclaredConstructor().newInstance();// 5.執行私有方法privateMethod.invoke(user);

4.底層實現原理

從上述內容可以看出,對于反射來說,操縱類最主要的方法是 invoke,所以搞懂了 invoke 方法的實現,也就搞定了反射的底層實現原理了。1aK28資訊網——每日最新資訊28at.com

invoke 方法的執行流程如下:1aK28資訊網——每日最新資訊28at.com

  • 查找方法:當通過 java.lang.reflect.Method 對象調用 invoke 方法時,Java 虛擬機(JVM)首先確認該方法是否存在并可以訪問。這包括檢查方法的訪問權限、方法簽名是否匹配等。
  • 安全檢查:如果方法是私有的或受保護的,還需要進行訪問權限的安全檢查。如果當前調用者沒有足夠的權限訪問這個方法,將拋出 IllegalAccessException。
  • 參數轉換和適配:invoke 方法接受一個對象實例和一組參數,需要將這些參數轉換成對應方法簽名所需要的類型,并且進行必要的類型檢查和裝箱拆箱操作。
  • 方法調用:對于非私有方法,Java 反射實際上是通過 JNI(Java Native Interface,Java 本地接口)調用到 JVM 內部的 native 方法,例如 java.lang.reflect.Method.invoke0()。這個 native 方法負責完成真正的動態方法調用。對于 Java 方法,JVM 會通過方法表、虛方法表(vtable)進行查找和調用;對于非虛方法或者靜態方法,JVM 會直接調用相應的方法實現。
  • 異常處理:在執行方法的過程中,如果出現任何異常,JVM 會捕獲并將異常包裝成 InvocationTargetException 拋出,應用程序可以通過這個異常獲取到原始異常信息。
  • 返回結果:如果方法正常執行完畢,invoke 方法會返回方法的執行結果,或者如果方法返回類型是 void,則不返回任何值。

通過這種方式,Java 反射的 invoke 方法能夠打破編譯時的綁定,實現運行時動態調用對象的方法,提供了極大的靈活性,但也帶來了運行時性能損耗和安全隱患(如破壞封裝性、違反訪問控制等)。1aK28資訊網——每日最新資訊28at.com

5.優缺點分析

反射的優點如下:1aK28資訊網——每日最新資訊28at.com

  • 靈活性:使用反射可以在運行時動態加載類,而不需要在編譯時就將類加載到程序中。這對于需要動態擴展程序功能的情況非常有用。
  • 可擴展性:使用反射可以使程序更加靈活和可擴展,同時也可以提高程序的可維護性和可測試性。
  • 實現更多功能:許多框架都使用反射來實現自動化配置和依賴注入等功能。例如,Spring 框架就使用反射來實現依賴注入。

反射的缺點如下:1aK28資訊網——每日最新資訊28at.com

  • 性能問題:使用反射會帶來一定的性能問題,因為反射需要在運行時動態獲取類的信息,這比在編譯時就獲取信息要慢。
  • 安全問題:使用反射可以訪問和修改類的字段和方法,這可能會導致安全問題。因此,在使用反射時需要格外小心,確保不會對程序的安全性造成影響。

本文鏈接:http://www.www897cc.com/showinfo-26-76526-0.html面試官:說說反射的底層實現原理?

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

上一篇: 八大編程語言在網絡安全領域的優勢和職業機會

下一篇: DDIA:消息系統—生產者和消費者的游戲?

標簽:
  • 熱門焦點
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態工廠方法模式,不屬于GoF 23種設計
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 深度探索 Elasticsearch 8.X:function_score 參數解讀與實戰案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結果進行自定義評分。function_score 提供了一系列的參數和函數讓我們可以根據需求靈活地進行設置。近期
  • 重估百度丨“晚熟”的百度云,能等到春天嗎?

    &copy;自象限原創作者|程心排版|王喻可2016年7月13日,百度云計算戰略發布會在北京舉行,宣告著百度智能云的正式啟程。彼時的會場座無虛席,甚至排隊排到了門外,在場的所有人幾乎都
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的&ldquo;網紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內直播,
  • OPPO K11采用全方位護眼屏:三大護眼能力減輕視覺疲勞

    日前OPPO官方宣布,全新的OPPO K11將于7月25日正式發布,將主打旗艦影像,和同檔位競品相比,其最大的賣點就是將配備索尼IMX890主攝,堪稱是2000檔位影像表
Top 主站蜘蛛池模板: 铁岭市| 丹寨县| 枣庄市| 睢宁县| 卓尼县| 西乌珠穆沁旗| 木兰县| 灵石县| 固阳县| 文昌市| 灵璧县| 和顺县| 柘荣县| 准格尔旗| 门头沟区| 清镇市| 漳州市| 满洲里市| 栾川县| 青龙| 铜鼓县| 汶上县| 革吉县| 彩票| 黎川县| 濉溪县| 屏山县| 潼关县| 景宁| 延寿县| 津南区| 乃东县| 丁青县| 密云县| 黑水县| 广水市| 胶南市| 武强县| 腾冲县| 日照市| 沿河|