深入探討Java類載入器

來源:互聯網
上載者:User

類載入器是 Java 語言的一個創新,也是 Java 語言流行的重要原因之一。 它使得 Java 類可以被動態載入到 JAVA 虛擬機器中並執行。類載入器從 JDK 1.0 就出現了,最初是為了滿足 Java Applet 的需要而開發出來的。Java Applet 需要從遠程下載 Java 類檔案到瀏覽器中並執行。現在類載入器在 Web 容器和 OSGi 中得到了廣泛的使用。一般來說,Java 應用的開發人員不需要直接同類加 載器進行互動。JAVA 虛擬機器預設的行為就已經足夠滿足大多數情況的需求了。 不過如果遇到了需要與類載入器進行互動的情況,而對類載入器的機制又不是很 瞭解的話,就很容易花大量的時間去調試 ClassNotFoundException 和 NoClassDefFoundError 等異常。本文將詳細介紹 Java 的類載入器,協助讀者 深刻理解 Java 語言中的這個重要概念。下面首先介紹一些相關的基本概念。

類載入器基本概念

顧名思義,類載入器(class loader)用來加 載 Java 類到 JAVA 虛擬機器中。一般來說,JAVA 虛擬機器使用 Java 類的方式如 下:Java 來源程式(.java 檔案)在經過 Java 編譯器編譯之後就被轉換成 Java 位元組代碼(.class 檔案)。類載入器負責讀取 Java 位元組代碼,並轉換成 java.lang.Class 類的一個執行個體。每個這樣的執行個體用來表示一個 Java 類。通過 此執行個體的 newInstance()方法就可以建立出該類的一個對象。實際的情況可能更 加複雜,比如 Java 位元組代碼可能是通過工具動態產生的,也可能是通過網路下 載的。

基本上所有的類載入器都是 java.lang.ClassLoader 類的一個實 例。下面詳細介紹這個 Java 類。

java.lang.ClassLoader 類介紹

java.lang.ClassLoader 類的基本職責就是根據一個指定的類的名稱, 找到或者產生其對應的位元組代碼,然後從這些位元組代碼中定義出一個 Java 類, 即 java.lang.Class 類的一個執行個體。除此之外,ClassLoader 還負責載入 Java 應用所需的資源,如影像檔和設定檔等。不過本文只討論其載入類的功能。 為了完成載入類的這個職責,ClassLoader 提供了一系列的方法,比較重要的方 法如 表 1 所示。關於這些方法的細節會在下面進行介紹。

表 1. ClassLoader 中與載入類相關的方法

方法 說 明
getParent() 返回該類載入器的父類載入器。
loadClass(String name) 載入名稱為 name 的類 ,返回的結果是 java.lang.Class 類的執行個體。
findClass (String name) 尋找名稱為 name 的類,返回的結果是 java.lang.Class 類的執行個體。
findLoadedClass(String name) 尋找名稱為 name 的已經被載入過的類,返回的結果是 java.lang.Class 類的執行個體。
defineClass(String name, byte[] b, int off, int len) 把位元組數組 b 中的內容轉換成 Java 類,返回的結果是 java.lang.Class 類的執行個體。這個方法被聲明為 final 的。
resolveClass(Class<?> c) 連結指定的 Java 類。

對於 表 1 中給出的方法,表示類名稱的 name 參數的值是類的二進位名稱。需要注意的是內部類的表示,如 com.example.Sample$1 和 com.example.Sample$Inner 等表示方式。這些方法 會在下面介紹類載入器的工作機制時,做進一步的說明。下面介紹類載入器的樹 狀組織圖。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.