最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java類加載器和類反射使用示例

 更新時(shí)間:2014年03月10日 16:20:28   作者:  
這篇文章主要介紹了java類加載器和類反射使用示例,需要的朋友可以參考下

一、一個(gè)命令對(duì)應(yīng)一個(gè)進(jìn)程。

當(dāng)我們啟動(dòng)一個(gè)Java程序,即啟動(dòng)一個(gè)main方法時(shí),都將啟動(dòng)一個(gè)Java虛擬機(jī)進(jìn)程,不管這個(gè)進(jìn)程有多么復(fù)雜。而不同的JVM進(jìn)程之間是不會(huì)相互影響的。這也就是為什么說(shuō),Java程序只有一個(gè)入口——main方法,讓虛擬機(jī)調(diào)用。而兩個(gè)mian方法,對(duì)應(yīng)的是2個(gè)JVM進(jìn)程,啟動(dòng)的是兩個(gè)不同的類加載器,操作的實(shí)際上是不同的類。故而不會(huì)互相影響。

二、類加載。

當(dāng)我們使用一個(gè)類,如果這個(gè)類還未加載到內(nèi)存中,系統(tǒng)會(huì)通過(guò)加載、連接、初始化對(duì)類進(jìn)行初始化。

1、類加載:指的是將類的class文件讀入JVM,并為之創(chuàng)建一個(gè)Class對(duì)象。

2、類連接:指的是把類的二進(jìn)制數(shù)據(jù)合并到JRE中,這又分為3個(gè)階段:

a)、校驗(yàn):檢查載入Class文件數(shù)據(jù)的正確性。

b)、準(zhǔn)備:給類的靜態(tài)變量分配存儲(chǔ)空間,并進(jìn)行默認(rèn)初始化。

c)、解析:將類的二進(jìn)制數(shù)據(jù)中的符號(hào)引用替換成直接引用。

3、初始化:對(duì)類的靜態(tài)變量、靜態(tài)初始化塊進(jìn)行初始化。

(注意:一個(gè)final類型的靜態(tài)屬性,如果在編譯時(shí)已經(jīng)得到了屬性值,那么調(diào)用該屬性時(shí),不會(huì)導(dǎo)致該類初始化,因?yàn)檫@個(gè)相當(dāng)于使用常量;

使用ClassLoader()方法,只是加載該類,并未初始化。)

三、類加載器。

類加載器就是負(fù)責(zé)將.class文件加載到內(nèi)存中,并為之生成對(duì)應(yīng)的java.lang.Class對(duì)象,它負(fù)責(zé)加載所有的類,而一旦一個(gè)類被加載入JVM中,就不會(huì)被再次載入了。

在Java中,一個(gè)類用其全限定類名(即包名+類名)作為標(biāo)識(shí)。

而在JVM中,一個(gè)類用其全限定類名和其類加載器作為標(biāo)識(shí)。

JVM運(yùn)行時(shí)會(huì)產(chǎn)生3個(gè)ClassLoader,分別為:BootstrapClassLoader(根類加載器)、ExtClassLoader(擴(kuò)展類加載器)和AppClassLoader(系統(tǒng)類加載器)。UML結(jié)構(gòu)如下:

其中,BootstrapClassLoader負(fù)責(zé)加載JRE的核心類庫(kù),它不是ClassLoader的子類,使用C++編寫(xiě),因此我們?cè)贘ava中看不到它,通過(guò)其子類的getParent()方法獲取時(shí),將返回null。BootstrapClassLoader負(fù)責(zé)裝載JRE目標(biāo)下的rt.jar、charsets.jar等Java核心類庫(kù)。

如圖可知,ExtClassLoader和AppClassLoader為ClassLoader的子類。在API中看不到它們,他們位于rt.jar文件中。全限定類名分別為:

sun.misc.Launcher$ExtClassLoader 和 sun.misc.Launcher$AppClassLoader.

其中,ExtClassLoader負(fù)責(zé)裝載JRE擴(kuò)展目錄ext中JAR包,而AppClassLoader負(fù)責(zé)裝載Classpath路徑下的類包。

測(cè)試如下:

復(fù)制代碼 代碼如下:

package com.stopTalking.crazy;
public class TestClassLoader {
public static void main(String[] args) {
//獲取當(dāng)前線程的類裝載器 
ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
//獲取System類的類裝載器 
ClassLoader loader1 = System.class.getClassLoader(); 
//獲取本類TestClassLoader的類裝載器loader2 
ClassLoader loader2 = TestClassLoader.class.getClassLoader(); 
//獲取loader2的父類 
ClassLoader loader3 = loader2.getParent(); 
//獲取loader2的父類的父類 
ClassLoader loader4 = loader3.getParent(); 
System.out.println(loader); 
System.out.println(loader1); 
System.out.println(loader2); 
System.out.println(loader3); 
System.out.println(loader4); 

}

控制臺(tái)輸出:

復(fù)制代碼 代碼如下:

//當(dāng)前線程類獲取的類加載器是AppClassLoader
sun.misc.Launcher$AppClassLoader@6b97fd
//System類為根裝載器加載,java中訪問(wèn)不到,所以為null
null
//本類的類加載器當(dāng)然也是AppClassLoader
sun.misc.Launcher$AppClassLoader@6b97fd
sun.misc.Launcher$ExtClassLoader@1c78e57
null

相關(guān)文章

  • Elasticsearch8.1中的Script使用實(shí)例深入解讀

    Elasticsearch8.1中的Script使用實(shí)例深入解讀

    這篇文章主要為大家介紹了Elasticsearch8.1中的Script使用實(shí)例深入解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 關(guān)于java入門(mén)與java開(kāi)發(fā)環(huán)境配置詳細(xì)教程

    關(guān)于java入門(mén)與java開(kāi)發(fā)環(huán)境配置詳細(xì)教程

    這篇文章主要介紹了關(guān)于java入門(mén)與java開(kāi)發(fā)環(huán)境配置詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • SpringCloud使用Kafka Streams實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理

    SpringCloud使用Kafka Streams實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理

    使用Kafka Streams在Spring Cloud中實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理可以幫助我們構(gòu)建可擴(kuò)展、高性能的實(shí)時(shí)數(shù)據(jù)處理應(yīng)用,Kafka Streams是一個(gè)基于Kafka的流處理庫(kù),本文介紹了如何在SpringCloud中使用Kafka Streams實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理,需要的朋友可以參考下
    2024-07-07
  • Java動(dòng)態(tài)填充Excel模板實(shí)戰(zhàn)教程

    Java動(dòng)態(tài)填充Excel模板實(shí)戰(zhàn)教程

    在日常開(kāi)發(fā)中,我們經(jīng)常需要生成格式統(tǒng)一的 Excel 文件,比如報(bào)表、發(fā)票、訂單清單、成績(jī)單等,手動(dòng)創(chuàng)建 Excel 文件不僅效率低,而且難以保證樣式的一致性相比之下,所以本文將介紹如何通過(guò)Java實(shí)現(xiàn)Excel模板的數(shù)據(jù)填充與自動(dòng)化導(dǎo)出,需要的朋友可以參考下
    2025-07-07
  • java7改善后的異常處理

    java7改善后的異常處理

    在本篇文章里小編給大家整理的是關(guān)于java7改善后的異常處理知識(shí)點(diǎn)總結(jié),有需要的朋友們參考下。
    2019-11-11
  • SpringCloud使用Feign實(shí)現(xiàn)動(dòng)態(tài)路由操作

    SpringCloud使用Feign實(shí)現(xiàn)動(dòng)態(tài)路由操作

    這篇文章主要介紹了SpringCloud使用Feign實(shí)現(xiàn)動(dòng)態(tài)路由操作,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • Java利用DelayQueue實(shí)現(xiàn)延遲任務(wù)代碼實(shí)例

    Java利用DelayQueue實(shí)現(xiàn)延遲任務(wù)代碼實(shí)例

    這篇文章主要介紹了Java利用DelayQueue實(shí)現(xiàn)延遲任務(wù)代碼實(shí)例,DelayQueue?是一個(gè)支持延時(shí)獲取元素的阻塞隊(duì)列,?內(nèi)部采用優(yōu)先隊(duì)列?PriorityQueue?存儲(chǔ)元素,同時(shí)元素必須實(shí)現(xiàn)?Delayed?接口,需要的朋友可以參考下
    2023-12-12
  • 深入分析Comparable與Comparator及Clonable三個(gè)Java接口

    深入分析Comparable與Comparator及Clonable三個(gè)Java接口

    接口不是類,而是對(duì)類的一組需求描述,這些類要遵從接口描述的統(tǒng)一格式進(jìn)行定義,這篇文章主要為大家詳細(xì)介紹了Java的Comparable,Comparator和Cloneable的接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-05-05
  • Log4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載(替換過(guò)程)

    Log4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載(替換過(guò)程)

    Apache?開(kāi)源項(xiàng)目?Log4j?的遠(yuǎn)程代碼執(zhí)行漏洞細(xì)節(jié)被公開(kāi),由于?Log4j?的廣泛使用,該漏洞一旦被攻擊者利用會(huì)造成嚴(yán)重危害,下面小編給大家?guī)?lái)了Log4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載,感興趣的朋友一起看看吧
    2021-12-12
  • JavaGUI界面實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)方法

    JavaGUI界面實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)方法

    這篇文章主要給大家介紹了關(guān)于JavaGUI界面實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的相關(guān)資料, GUI是指圖形用戶界面,指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

昭苏县| 开阳县| 和田市| 宜城市| 永济市| 栖霞市| 渭南市| 汝阳县| 宜兰市| 饶阳县| 巫山县| 隆昌县| 三门县| 宣化县| 江永县| 玉溪市| 西宁市| 三穗县| 绥芬河市| 通渭县| 邯郸市| 陵水| 西藏| 高平市| 吴川市| 东海县| 泌阳县| 军事| 荃湾区| 穆棱市| 虎林市| 泰来县| 上饶市| 曲沃县| 博乐市| 景宁| 山阳县| 密云县| 石泉县| 来宾市| 宜兰市|