您好,登錄后才能下訂單哦!
這篇文章主要介紹“java類加載器URLClassLoader怎么使用”,在日常操作中,相信很多人在java類加載器URLClassLoader怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java類加載器URLClassLoader怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
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's over!"); } }
這里的 URL 資源,我用的是虛擬機里面的搭建的簡單的 nginx 服務器,也是看著別人的教程搭建的,很簡陋的一個服務器,哈哈。但是,這里足夠使用了,如果沒有條件,或者想簡單一點,可以使用本地的文件系統。
使用 file:///jar包地址
這個替換就行了。
這里使用的 jar 包也很簡單,但是我直接打成了 jar 包,只有 class 文件了,我反編譯以下,把代碼圖片貼出來吧。
這個反編譯不是全部代碼,但是細節很簡單,只有一個 say()
方法,可以參照下面的運行截圖,補全。
然后是運行截圖,注意我這里這個 -encoding utf-8 是指定使用編碼字符集,因為cmd里面執行代碼,如果有中文可能無法通過編譯。
到此,關于“java類加載器URLClassLoader怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。