新聞中心
2、類的加載過程3、自定義ClassLoader4、總結(jié)作為一名Java開發(fā)者,它又是如何實現(xiàn)對于Java代碼中所用到的各種不同類型資源進行裝載和初始化呢?
- 本文目錄導(dǎo)讀:
- 1、什么是類加載器?
- 2、類的加載過程
- 3、自定義ClassLoader
- 4、總結(jié)

作為一名Java開發(fā)者,我們都知道類是Java語言的基本組成部分之一。而在程序運行時,這些類需要被動態(tài)地載入內(nèi)存中才能被使用。這里就要引出一個重要概念——“類加載器”。那么什么是類加載器?它又是如何實現(xiàn)對于Java代碼中所用到的各種不同類型資源進行裝載和初始化呢?
一、什么是類加載器?
在Java虛擬機(JVM)啟動后,系統(tǒng)會創(chuàng)建三個主要的class loader:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。
1. Bootstrap ClassLoader
Bootstrap ClassLoader 是最頂層的ClassLoader,負責(zé)將核心庫(JAVA_HOME/lib下面)或 -Xbootclasspath 選項指定路徑下面所有jar包或者目錄 加載到內(nèi)存當中。
2. Extension ClassLoader
Extension 類加載器又稱為擴展類加載器,它負責(zé)將 JAVA_HOME/jre/lib/ext 或者由 java.ext.dirs 系統(tǒng)變量指定位置 中 的 jar 包讀取并加入 classpath 中。
3. Application(Class) Loader
Application(Class) Loader 又稱為系統(tǒng)級應(yīng)用程序(應(yīng)用)Class 加載器,在 JVM 啟動時會構(gòu)造該ClassLoader, 它從環(huán)境變量 CLASSPATH 或 -cp 指定的目錄或 jar 包中加載 Class。
二、類的加載過程
了解了類加載器之后,我們就可以來看一下類的加載過程。在Java虛擬機內(nèi)部,一個Class被載入內(nèi)存時需要經(jīng)歷以下三個步驟:
1. 加載
這是類加載過程中的第一個階段。在該階段,JVM 會通過ClassLoader讀取.class文件,并創(chuàng)建對應(yīng)Class對象實例。注意:此處僅僅是將.class文件中保存的內(nèi)容讀取到內(nèi)存當中,并不包含其他操作(如鏈接和初始化等)。
2. 鏈接
在鏈接階段,JVM 將已經(jīng)生成好的字節(jié)碼進行驗證、準備以及解析等處理工作。其中“驗證”主要用于檢查代碼是否符合規(guī)范,“準備”則是為變量分配空間并設(shè)置默認值,“解析”則是將常量池引用轉(zhuǎn)換成直接引用等操作。
3. 初始化
初始化即為執(zhí)行
三、自定義ClassLoader
除了系統(tǒng)提供的三種ClassLoader外,我們還可以自己定義ClassLoader來完成特定需求下對資源文件(比如properties)或者class文件(比如插件化開發(fā))動態(tài)裝載到程序運行環(huán)境當中去。
```java
public class MyCustomLoader extends ClassLoader {
@Override
public Class> loadClass(String name) throws ClassNotFoundException {
if(name.startsWith("com.example.")) { // 判斷需要自己加載的類名前綴
return findClass(name);
}
return super.loadClass(name);
}
protected Class> findClass(String name) throws ClassNotFoundException {
byte[] classData = getClassDataFromCustomPath();
if (classData == null) {
throw new ClassNotFoundException();
} else {
return defineClass(name, classData, 0, classData.length);
private byte[] getClassDataFromCustomPath() {...} // 根據(jù)路徑獲取對應(yīng)的二進制流數(shù)據(jù)
}
```
四、總結(jié)
在Java中,類加載器是非常重要且基礎(chǔ)的概念之一。了解其實現(xiàn)原理以及使用方法對于我們編寫高質(zhì)量代碼和優(yōu)化程序性能都有很大幫助。
同時,自定義ClassLoader也為我們提供了更多靈活性,在某些特定場景下可以用來進行動態(tài)裝載資源文件或者插件化開發(fā)等操作。
最后,通過本篇文章的閱讀與學(xué)習(xí),相信各位讀者已經(jīng)掌握了Java中類加載器相關(guān)知識,并能夠更好地運用到實際開發(fā)當中去。
本文題目:Java中類加載器的分析與理解!詳細解析類的加載過程
網(wǎng)站路徑:http://www.5511xx.com/article/cccpshp.html


咨詢
建站咨詢
