每個JAVA程序至少有三個類加載器,它們是:
1.引導類加載器(bootstrap class loader)
2.擴展類加載器(Ext class loader)
3.系統類加載器(System class loader/Application class loader)
[@more@]引導類加載器負責加載系統類,通常從rt.jar那裡加載。
擴展類加載器用於從jre/lib/ext目錄加載一個標準的擴展名,比如:自己擴張了JAVA的一些類可以放到那個目錄下使用。
系統類加載器負責加載應用程序類,我們可以用-classpath命令實現加載應用程序類
我們可以根據需要實現自己的類加載器或者使用父類加載器,使我們的JAVA程序動態化。現在,來說下原理:
引導類加載器是最根本的,也就是說它沒有父類加載器,其它的類加載器都有父類加載器。
加載類時,我們可以先獲得當前線程,取得該線程的上下文類加載器,使用loadClass方法加載類,當然也可以使用Class.forName,前一種是動態的加載擴展類庫中的類。
編寫自己的類加載器,你隻需要擴展ClassLoader類,一般loadClass方法用於將類的加載交給父類加載器,而當父類加載器無法加載該類時,調用findClass方法,來實現類的加載。
比如:
public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
}
loadClassData要實現把我們要加載的類文件,比如Test.class文件的字節碼放到byte數組中,然後使用 defineClass方法将一个字节数组转换为 Class 类的实例,這樣就實現了類的加載,當然name的值是類的二进制名称,在這裡是“Test.class”
可以使用類加載器實現簡單的編譯器或者於接口搭配實現JAVA代碼的動態性
這裡是應用方面:
http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.html?page=1
代碼下載地址:
http://www.javaworld.com/javaworld/jw-06-2006/dynamic/jw-0612-dynamic.zip
由於時間有限,所以倉促的發表文章,對於類加載器方面可以在這裡探討,以後會更新內容
1.引導類加載器(bootstrap class loader)
2.擴展類加載器(Ext class loader)
3.系統類加載器(System class loader/Application class loader)
[@more@]引導類加載器負責加載系統類,通常從rt.jar那裡加載。
擴展類加載器用於從jre/lib/ext目錄加載一個標準的擴展名,比如:自己擴張了JAVA的一些類可以放到那個目錄下使用。
系統類加載器負責加載應用程序類,我們可以用-classpath命令實現加載應用程序類
我們可以根據需要實現自己的類加載器或者使用父類加載器,使我們的JAVA程序動態化。現在,來說下原理:
引導類加載器是最根本的,也就是說它沒有父類加載器,其它的類加載器都有父類加載器。
加載類時,我們可以先獲得當前線程,取得該線程的上下文類加載器,使用loadClass方法加載類,當然也可以使用Class.forName,前一種是動態的加載擴展類庫中的類。
編寫自己的類加載器,你隻需要擴展ClassLoader類,一般loadClass方法用於將類的加載交給父類加載器,而當父類加載器無法加載該類時,調用findClass方法,來實現類的加載。
比如:
public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
}
loadClassData要實現把我們要加載的類文件,比如Test.class文件的字節碼放到byte數組中,然後使用 defineClass方法将一个字节数组转换为 Class 类的实例,這樣就實現了類的加載,當然name的值是類的二进制名称,在這裡是“Test.class”
可以使用類加載器實現簡單的編譯器或者於接口搭配實現JAVA代碼的動態性
這裡是應用方面:
http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.html?page=1
代碼下載地址:
http://www.javaworld.com/javaworld/jw-06-2006/dynamic/jw-0612-dynamic.zip
由於時間有限,所以倉促的發表文章,對於類加載器方面可以在這裡探討,以後會更新內容
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8672542/viewspace-896348/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8672542/viewspace-896348/