• 招生咨詢熱線:4008-569-579 
  • 手機(jī)版
    用手機(jī)掃描二維碼直達(dá)商品手機(jī)版
招生咨詢熱線
4008-569-579
機(jī)構(gòu)主頁 > 培訓(xùn)資料 > Java類加載的過程是怎么實現(xiàn)的
機(jī)構(gòu)主頁 > 培訓(xùn)資料>Java類加載的過程是怎么實現(xiàn)的

Java類加載的過程是怎么實現(xiàn)的

來源:廣州達(dá)內(nèi)教育        時間:2023-05-30        熱度:24℃        返回列表

      Java類加載的過程是怎么實現(xiàn)的這個是很多想學(xué)習(xí)java或者是已經(jīng)在學(xué)習(xí)java的學(xué)員都會想要了解的,java開發(fā)的話肯定是要經(jīng)過很多的步驟才可以實現(xiàn)的,而java類加載的過程就是很重要的一步了,下面達(dá)內(nèi)科技就來給大家整理下。

  一. 類的加載概述


  當(dāng)程序要使用某個類時,如果該類還未被加載到內(nèi)存中,則系統(tǒng)會通過加載、連接、初始化三步來實現(xiàn)對這個類進(jìn)行初始化。


  1. 加載:是將class文件讀入內(nèi)存,并為之創(chuàng)建一個Class對象。任何類被使用時系統(tǒng)都會建立一個Class對象。


  2. 連接:


  (1)驗證是否有正確的內(nèi)部結(jié)構(gòu),并和其他類協(xié)調(diào)一致。


  (2)準(zhǔn)備負(fù)責(zé)為類的靜態(tài)成員分配內(nèi)存,并設(shè)置默認(rèn)初始化值。


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


  3. 初始化:就是我們以前講過的初始化步驟。


  二. 類加載時機(jī)


  當(dāng)Java程序通過下面6種方式使用某個類或接口時,系統(tǒng)會初始化該類或接口。


  1. 創(chuàng)建類的實例。


  2. 訪問類的靜態(tài)變量,或者為靜態(tài)變量賦值。


  3. 調(diào)用類的靜態(tài)方法。


  4. 初始化某個類的子類。


  5. 直接使用Java.exe命令來運(yùn)行某個主類。


  6. 使用反射方式來強(qiáng)制創(chuàng)建某個類或接口對應(yīng)的Java.lang.Class對象。


  三. 類加載器的概述和分類


  1. 類加載器負(fù)責(zé)將.class文件加載到內(nèi)存中,并為之生成對應(yīng)的Class項,在Java中,類裝載器把一個類裝入JVM中,要經(jīng)過以下步驟:


  (1)裝載:查找和導(dǎo)入Class文件;


  (2)鏈接:把類的二進(jìn)制數(shù)據(jù)合并到JRE中;


  校驗:檢查載入Class文件數(shù)據(jù)的正確性;


  準(zhǔn)備:給類的靜態(tài)變量分配存儲空間;


  解析:將符號引用轉(zhuǎn)成直接引用;


  (3)初始化:對類的靜態(tài)變量,靜態(tài)代碼塊執(zhí)行初始化操作


  (4)當(dāng)JVM啟動時,會形成由三個加載器組成的初始類加載器層次結(jié)構(gòu):


  Bootstrap ClassLoader 根類加載器


  Extension ClassLoader 擴(kuò)展類加載器


  System ClassLoader 系統(tǒng)類加載器


  2. 類加載器的作用


  Bootrap

ClassLoader被稱為引導(dǎo)(也稱為原始或跟)類加載器,它負(fù)責(zé)加載Java的核心類。跟類加載器不是Java.lang.ClassLoader的子類,而是JVM自身實現(xiàn)的。在JDK中JRE的lib目錄下rt.jar文件中。


  Extension

ClassLoader負(fù)責(zé)加載JRE拓展目錄中的JAR包的類,它的父類加載器是跟類加載器。在JDK中JRE的lib目錄下ext目錄。


  System

ClassLoader負(fù)責(zé)在JVM啟動時加載來自Java命令的-classpath選項、Java.class,path系統(tǒng)屬性,或CLASSPATH指定的jar包和類歷經(jīng)。系統(tǒng)可通過ClassLoader的靜態(tài)方法或區(qū)該系統(tǒng)類加載器。如果沒有特別指定,則用戶自定義的類加載器都已類加載器作為父加載器。


  四. 反射概述


  JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法,同時對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性,這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象方法的功能稱為Java語言的反射機(jī)制。

1. 要想解剖一個類,必須先要獲取到該類的字節(jié)碼文件對象,而解剖使用的就是Class類中的方法,所以先要獲取到每一個字節(jié)碼文件對應(yīng)的Class類型的對象。 2.

每個類被加載后,系統(tǒng)會為該類生成一個對應(yīng)的Class對象,通過該Class對象可以訪問到JVM中的這個類。


  獲得Class對象通常有三種方式:


  (1)使用Class類的forName(String clazz)靜態(tài)方法。


  (2)調(diào)用某個類的class屬性來獲取該類的的Class對象。


  (3) 調(diào)用某個對象的getClass()方法,該方法是Object類的一個方法。


  如果說你們想要學(xué)習(xí)java的話那么達(dá)內(nèi)科技?xì)g迎大家來我們公司進(jìn)行實地考察,也可以點(diǎn)擊我們文章下面的獲取試聽資格按鈕來獲取我們的java課程免費(fèi)試聽資格,在試聽中可以更加深入的了解達(dá)內(nèi)科技。

電話咨詢

電話咨詢

咨詢電話:
4008-569-579
回到頂部

回到頂部