首頁 > Java > java教程 > 主體

java類別載入器URLClassLoader怎麼使用

WBOY
發布: 2023-05-01 22:55:05
轉載
1267 人瀏覽過

類別載入器之URLClassLoader的簡單demo

public class Test {
	public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
		URL[] urls = new URL[] {new URL("http://192.168.119.132:8080/images/animal.jar")};
		URLClassLoader classLoader = new URLClassLoader(urls);
		//加载类以后就可以得到 Class 对象了
		Class<?> clazz = classLoader.loadClass("com.learn.animal.Dog");
		classLoader.close();  //加载完类以后就可以删除了。
		//关闭 classLoader, 否则会造成 资源泄露  Resource leak
		//这里不使用默认的构造器,使用带参数的构造器 获取特殊的构造器
		Constructor<?> con = clazz.getDeclaredConstructor(String.class, int.class, int.class);
		//使用构造器创建对象
		Object ob = con.newInstance("小黑",12,50);
		//在调用 Dog 对象的 say 方法,返回对 Dog 对象自己的描述
		Method mtd0 = clazz.getMethod("say", new Class<?>[] {});  
		String dogSay = (String)mtd0.invoke(ob, new Object[] {});  
		System.out.println(dogSay);
		//再使用setter 方法,改变属性  模拟 Dog 对象,逐渐长大,变胖  哈哈!
		System.out.println("Three years later......");
		Method mtd1 = clazz.getMethod("setAge", int.class);
		mtd1.invoke(ob, 15);
		Method mtd2 = clazz.getMethod("setWeight", int.class);
		mtd2.invoke(ob, 70);
		//注意这些方法是有返回值的!  返回值都是 Object 类型,需要自己强转类型
		dogSay = (String)mtd0.invoke(ob, new Object[] {});  
		System.out.println(dogSay);
		System.out.println("It&#39;s over!");
	}
}
登入後複製

這裡的URL 資源,我用的是虛擬機器裡面的搭建的簡單的nginx 伺服器,也是看著別人的教學搭建的,很簡陋的一個伺服器,哈哈。但是,這裡足夠使用了,如果沒有條件,或者想簡單一點,可以使用本地的檔案系統。
使用 file:///jar套件位址 這個替換就行了。

這裡使用的 jar 套件也很簡單,但是我直接打成了 jar 包,只有 class 檔案了,我反編譯以下,把程式碼圖片貼出來吧。
這個反編譯不是全部程式碼,但是細節很簡單,只有一個 say() 方法,可以參考下面的運行截圖,補全。

java類別載入器URLClassLoader怎麼使用

然後是運行截圖,注意我這裡這個 -encoding utf-8 是指定使用編碼字元集,因為cmd裡面執行程式碼,如果有中文可能無法通過編譯。

java類別載入器URLClassLoader怎麼使用

以上是java類別載入器URLClassLoader怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!