JAVA基礎_類加載器
阿新 • • 發佈:2017-09-11
內部類 ror 遇到 大致 otf win class pla nal
什麽是類加載器
- 類加載器是Java語言在1.0版本就引入的。最初是為了滿足JavaApplet需要。現在類加載器在Web容器和OSGI中得到了廣泛的應用,一般來說,Java應用的開發人員不需要直接同類加載器進行交互。Java虛擬機默認的行為就已經足夠滿足大多數情況的需求了。不過如果遇到了需要與類加載器進行交互的情況,而對類加載器的機制又不是很了解的話,就很容易花大量的時候在ClassNotFoundException和NoClassDefFoundError等異常上。
- 顧名思義,類加載器是用來加載Java類到Java虛擬機中。一般來說,Java虛擬機使用Java類的方式如下:Java源程序(.java文件)在經過Java編譯器編譯之後會被轉換成Java字節碼代碼(.class文件)。類加載器負責讀取Java字節代碼,並轉換成java.lang.Class類的一個實例。每個這樣的實例用來表示一個Java類。通過此實例的newInstance()方法就可以創建出該類的一個對象。實際的情況可能更復雜,比如Java字節碼可能是通過工具動態生成的,也可能是通過網絡下載的。基本上所有的類加載器都是java.lang.ClassLoader類的一個實例。
ClassLoader類介紹
java.lang.ClassLoader類的基本職責就是根據一個指定的類的名稱,找到或者生成其對應的字節代碼,然後從這些字節代碼中定義出一個Java類,即Java.lang.Class類的一個實例,除此之外,ClassLoader還負責加載Java應用所需要的資源,如圖像文件和配置文件。為了完成加載類這個職責,ClassLoader提供了一系列的方法。
表1:ClassLoader中與加載類相關的方法
| |||||||||||||||
在表1中給出的方法,表示類名稱的name參數的值是類的二進制名稱。需要註意的是內部類的表示,如:com.exampe.Husband$Wife和com.example.OutClass$InnerClass等表示形式。
類加載器的樹狀組織結構
Java中的類加載器大致可以分為兩類,一類是系統提供的,另外一類是Java應用開發人員自己編寫的。系統提供的主要有以下三種:
- 引導類加載器(bootstrap class loader):它用來加載Java的核心庫,是用原生代碼來實現的,並不集成自java.lang.ClassLoader。
- 擴展類加載器(extensions class loader):它用來加載Java的擴展庫。Java虛擬機的實現會提供一個擴展庫目錄。該類加載器在此目錄裏面查找並加載Java類。
- 系統類加載器(system class loader):他根據Java應用的類路徑(CLASSPATH)來加載Java類。一般來說,Java應用的類都是由它來完成加載的。可以通過ClassLoader.getSystemClassLoader();來獲取它。
除了系統提供的類加載器以外,開發人員可以通過繼承 java.lang.ClassLoader
類的方式實現自己的類加載器,以滿足一些特殊的需求。
圖1.類加載器樹狀結構示意圖
太累了。。。明天寫
JAVA基礎_類加載器