Java類載入器1.類載入器概述
阿新 • • 發佈:2018-12-11
類載入器概述
一、類的載入
(1)類的載入
- 當Java程式要使用某個類時,如果該類還未被載入到記憶體中,則系統會通過載入、連線、初始化三步來實現對這個類進行初始化。
- 載入:就是指將類的class檔案讀入記憶體,併為之建立一個Class物件。任何類被使用時,系統都會建立一個Class物件。
- 連線:
- 驗證:是否有正確的內部結構,並和其他類協調一致。
- 準備:負責為類的靜態成員分配記憶體,並設定預設初始化值(類的靜態成員隨著類的載入而載入)。
- 解析:將類的二進位制資料中的符號引用替換為直接引用。
- 初始化:就是以前接觸過的普通的初始化步驟。
二、類的初始化時機
(1)類的初始化時機:類在什麼時候做初始化工作呢?
- 建立類的例項的時候
- 訪問類的靜態變數,或者為靜態變數賦值的時候
- 呼叫類的靜態方法的時候
- 使用反射方式來強制建立某個類或介面對應的 java.lang.Class 物件的時候
- 初始化某個類的子類的時候(先有父類才能有子類)
- 直接使用 java.exe 命令來執行某個主類的時候
三、類載入器
(1)類載入器的作用:
- 負責將 .class檔案 載入到記憶體中,併為之生成對應的Class物件。
- 雖然我們不需要關心類載入機制,但是瞭解這個類載入機制我們就能更好的理解程式的執行。
(2)類載入器的組成:
- Bootstrap ClassLoader:根類載入器
- 也被稱為引導類載入器,負責
- 也被稱為引導類載入器,負責
- Extension ClassLoader:擴充套件類載入器
- 負責JRE的擴充套件目錄中jar包的載入。在JDK中JRE的lib目錄下的ext目錄中。
- Sysetm ClassLoader:系統類載入器
- 負責在JVM啟動時載入來自java命令的class檔案,以及classpath環境變數所指定的jar包和類路徑。
(3)通過這些描述,我們就可以知道我們常用的東西的載入都是由誰(系統類載入器)來完成的。到目前為止,我們已經知道把class檔案載入到記憶體中了,那麼,如果我們僅僅站在這些
四、反射
(1)JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個屬性和方法;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。
(2)要想解剖一個類,必須先要獲取到該類的位元組碼檔案物件。而解剖使用的就是Class類中的方法。所以,先要獲取到每一個位元組碼檔案對應的Class型別的物件。