在 java 應(yīng)用程序開(kāi)發(fā)中,只有被 java 虛擬機(jī)裝載的 Class 類(lèi)型才能在程序中使用。只要生成的字節(jié)碼符合 java 虛擬機(jī)的指令集和文件格式,就可以在 JVM 上運(yùn)行,這為 java 的跨平臺(tái)性提供條件。下面,我們來(lái)看看虛擬機(jī)是如何裝載和初始化一個(gè) class 類(lèi)的。
創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶提供成都西云數(shù)據(jù)中心 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。裝載一個(gè)類(lèi)
學(xué)習(xí)過(guò)C/C++語(yǔ)言的讀者知道,C/C++源代碼必須首先別編譯成本地的機(jī)器代碼,然后還需要一個(gè)鏈接代碼過(guò)程。該鏈接過(guò)程的主要任務(wù)就是:合并不同的源碼文件產(chǎn)出的中間代碼,并最終獲得一個(gè)可直接執(zhí)行的應(yīng)用程序。然后,Java語(yǔ)言不是這么做的,Java應(yīng)用中類(lèi)似于鏈接過(guò)程的步驟是在字節(jié)碼被裝載到JVM中之后再執(zhí)行的。
正如我們所知,JVM存在不止一個(gè)類(lèi)加載器,不同的加載器使用不同的方式來(lái)加載類(lèi)。但是,它們都只在必須加載類(lèi)時(shí),才開(kāi)始裝載類(lèi)。當(dāng)然,如果已裝載完畢的類(lèi)引用了某些未裝載的類(lèi),類(lèi)裝載器會(huì)進(jìn)一步去裝載這些類(lèi),整個(gè)的裝載過(guò)程是遞歸的。
裝載時(shí)機(jī)與方式
在Java中,類(lèi)的裝載策略是由類(lèi)加載器控制的。我們使用下面這個(gè)簡(jiǎn)單的示例代碼來(lái)演示類(lèi)的裝載方式與時(shí)機(jī):
// TestLoader.java package compiler; public class TestLoader { public static void main(String[] args) { System.out.println("test"); } }