亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JAVA的反射機制你了解多少

 更新時間:2022年02月05日 11:20:58   作者:橘子惡霸280  
這篇文章主要為大家詳細介紹了JAVA的反射機制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1、什么是反射?

在java開發(fā)中有一個非常重要的概念就是java反射機制,也是java的重要特征之一。

反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力,通過反射可以調用私有方法和私有屬性,大部分框架也都是運用反射原理的。

Reflection(反射)是被視為動態(tài)語言的關鍵,反射機制允許程序在執(zhí)行期借助于Reflection API取得任何
類的內部信息,并能直接操作任意對象的內部屬性及方法。

一個類有多個組成部分,例如:成員變量、方法、構造方法等,反射就是加載類,并解剖出類的各個組成部分。

2、反射能夠干什么?

Java的反射機制它知道類的基本結構,這種對Java類結構探知的能力,我們稱為Java類的“自審”。如eclipse中,一按點,編譯工具就會自動的把該對象能夠使用的所有的方法和屬性全部都列出來,供用戶進行選擇。這就是利用了Java反射的原理,是對我們創(chuàng)建對象的探知、自審。

反射能夠做到:

  • 在運行時判斷任意一個對象所屬的類;
  • 在運行時構造任意一個類的對象;
  • 在運行時判斷任意一個類所具有的成員變量和方法;
  • 在運行時獲取泛型信息;
  • 在運行時調用任意一個對象的成員變量和方法;
  • 在運行是處理注解;
  • 生成動態(tài)代理;

3、反射相關API 

  • java.lang.Class:反射的源頭
  • java.lang.reflect.Method:方法
  • java.lang.reflect.Field:屬性
  • java.lang.reflect.Constructor:構造器…

4、Class類的理解

(1)、介紹:

程序經過javac.exe命令以后,會生成一個或多個字節(jié)碼文件(.class結尾)。接著我們使用java.exe命令對某個字節(jié)碼文件進行解釋運行。相當于將某個字節(jié)碼文件加載到內存中。此過程就稱為類的加載。加載到內存中的類,我們就稱為運行時類,此運行時類,就作為Class的一個實例。

換句話說,Class的實例就對應著一個運行時類。

加載到內存中的運行時類,會緩存一定的時間。在此時間之內,我們可以通過不同的方式
來獲取此運行時類。

(2)、類的加載過程:

①加載:

在我們new對象或者使用Class.forName("包名.類")時類加載器(ClassLoader)會將類加載到內存中,并且創(chuàng)建一個Class對象

如何獲取Class對象?

JAVA

  • 類.class
  • 對象.getClass()
  • Class.forName(“包名.類”);

②鏈接:

鏈接所做的工作主要是驗證字節(jié)碼是否合法,為static 分配內存空間并且初始化(并非真正的初始化,只是將對應類型的變量給上默認值,比如int給0,double給0.0),解析

③初始化

真正的初始化

④使用

類的正常使用

⑤卸載

從內存中卸載(不需要我們關心何時卸載,由JVM去做)

(3)類加載器

類(CLASS) 只有被加載到 JVM 中后才能運行。當運行指定程序時,JVM會將編譯生成的.class文件按照需求和一定的規(guī)則加載到內存中,組織成為一個完整的Java應用程序。這個加載的過程是由類加載器來完成的,具體來說,就是由ClassLoader和它的子類來實現(xiàn)的。類加載器本身也是一個類,其實質是把類文件從硬盤讀取到內存中!

類加載器的分類:

1.BootStrap:主要負責加載核心的類庫(java.lang.*等),構造ExtClassLoaderAPPClassLoader;

2.ExtClassLoader:主要負責加載jre/lib/ext目錄下的一些擴展的jar包;

3.AppClassLoader:主要負責加載應用程序的主函數(shù)類(自己編寫的java文件是這個類加載器加載的);

System.out.println("app:" + System.getProperty("java.class.path"));
System.out.println("ext:" + System.getProperty("java.ext.dirs"));
System.out.println("----bootstrap---");
String[] str = System.getProperty("sun.boot.class.path").split(";");

for (String s : str) {
    System.out.println(s);
}

雙親委托(派)機制:

img

當一個Hello.class這樣的文件要被加載時。不考慮我們自定義類加載器,首先會在AppClassLoader中檢查是否加載過,如果有那就無需再加載了。如果沒有,那么會拿到父加載器,然后調用父加載器的loadClass方法。父類中同理也會先檢查自己是否已經加載過,如果沒有再往上。注意這個類似遞歸的過程,直到到達Bootstrap classLoader之前,都是在檢查是否加載過,并不會選擇自己去加載。直到BootstrapClassLoader,已經沒有父加載器了,這時候開始考慮自己是否能加載了,如果自己無法加載,會下沉到子加載器去加載,一直到最底層,如果沒有任何加載器能加載,就會拋出ClassNotFoundException。那么有人就有下面這種疑問了?

為什么要設計這種機制

這種設計有個好處是,如果有人想替換系統(tǒng)級別的類:String.java。篡改它的實現(xiàn),在這種機制下這些系統(tǒng)的類已經被Bootstrap classLoader加載過了(為什么?因為當一個類需要加載的時候,最先去嘗試加載的就是BootstrapClassLoader),所以其他類加載器并沒有機會再去加載,從一定程度上防止了危險代碼的植入。

總結

本篇文章就到這里了,希望能給您帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • 一文詳解Java中的動態(tài)填充Html模版并轉PDF

    一文詳解Java中的動態(tài)填充Html模版并轉PDF

    在后端技術中,模板引擎和PDF生成工具是兩個非常重要的領域,Thymeleaf和wkhtmltopdf是這兩個領域的杰出代表,下面就來詳細介紹一下Thymeleaf和wkhtmltopdf的技術特點吧
    2023-12-12
  • java針對電話號碼正則匹配實例

    java針對電話號碼正則匹配實例

    這篇文章主要介紹了java針對電話號碼正則匹配的方法,涉及java正則匹配與字符串操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 詳解Java中String類型與默認字符編碼

    詳解Java中String類型與默認字符編碼

    這篇文章主要介紹了Java中String類型與默認字符編碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • SpringBoot?實現(xiàn)自定義的?@ConditionalOnXXX?注解示例詳解

    SpringBoot?實現(xiàn)自定義的?@ConditionalOnXXX?注解示例詳解

    這篇文章主要介紹了SpringBoot?實現(xiàn)自定義的?@ConditionalOnXXX?注解,通過示例代碼介紹了實現(xiàn)一個自定義的?@Conditional?派生注解,Conditional?派生注解的類如何注入到?spring?容器,需要的朋友可以參考下
    2022-08-08
  • 淺談使用setBounds()方法需要注意的地方

    淺談使用setBounds()方法需要注意的地方

    下面小編就為大家?guī)硪黄獪\談使用setBounds()方法需要注意的地方。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java 安全模型,你了解了嗎

    Java 安全模型,你了解了嗎

    這篇文章主要介紹了Java 安全模型。Java的安全模型是其多個重要結構特點之一,它使Java成為適用于網(wǎng)絡環(huán)境的技術。Java安全模型側重于保護終端用戶免受從網(wǎng)絡下載的、來自不可靠來源的、惡意程序(以及善意程序中的bug)的侵犯。,需要的朋友可以參考下
    2019-06-06
  • jdk11?jdk17多版本共存切換方式

    jdk11?jdk17多版本共存切換方式

    這篇文章主要介紹了jdk11?jdk17多版本共存切換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 使用IDEA配置Mybatis-Plus框架圖文詳解

    使用IDEA配置Mybatis-Plus框架圖文詳解

    這篇文章主要介紹了使用IDEA配置Mybatis-Plus框架,本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 通過源代碼分析Mybatis的功能流程詳解

    通過源代碼分析Mybatis的功能流程詳解

    這篇文章主要介紹了通過源代碼分析Mybatis的功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java中子類調用父類構造方法的問題分析

    Java中子類調用父類構造方法的問題分析

    本篇文章介紹了,Java中子類調用父類構造方法的問題分析。需要的朋友參考下
    2013-04-04

最新評論