[转载]探討類加載機制

每個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

由於時間有限,所以倉促的發表文章,對於類加載器方面可以在這裡探討,以後會更新內容

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8672542/viewspace-896348/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8672542/viewspace-896348/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值