一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - java類加載器和類反射使用示例

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

2019-11-13 13:09java教程網(wǎng) JAVA教程

這篇文章主要介紹了java類加載器和類反射使用示例,需要的朋友可以參考下

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

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

二、類加載。

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

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

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

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

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

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

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

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

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

三、類加載器。

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

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

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

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

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

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

如圖可知,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路徑下的類包。

測試如下:

 

復(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);  
}  
}

 

控制臺輸出:

 

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产欧美精品v | 欧美一区二区三区免费高 | 出轨同学会2在线观看 | 变形金刚第一部 | 欧美黑人性猛交╳xx╳动态图 | 香蕉eeww99国产精选播放 | 男女一级特黄a大片 | 糖心vlog视频永久破解版 | 男人的天堂久久精品激情a 男人的天堂va | 亚洲国产视频一区 | 香港三级系列在线播放 | 国产亚洲精品精品国产亚洲综合 | 国产caoni555在线观看 | 成人网子 | 亚洲一级片在线播放 | 操破苍穹小说 | 日本在线观看视频网站 | 色小孩导航| 楚乔传第二部免费观看全集完整版 | 国产在线播放91 | 亚洲 在线 日韩 欧美 | 京东热在线观看 | 日本特级a禁片在线播放 | 美国69xxxx59 | 亚洲成人影院在线观看 | 成人欧美一区二区三区白人 | 大好硬好深好爽想要视频 | 波多野结衣久久国产精品 | 亚洲青草视频 | 精品一久久香蕉国产线看观 | 九九九九在线精品免费视频 | 午夜免费小视频 | 狠狠狠地啪香蕉 | 2019aw网站 | 国模娜娜一区二区三区 | 国产精品久久久久久久久免费 | 国产成人精品高清在线 | 天天操天天射天天爽 | www免费看| 免费看黄色片网站 | 国产免费看黄的私人影院 |