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パッケージに直接打ち込んだので、以下を逆コンパイルしてコード画像を掲載します。
この逆コンパイルはコード全体ではありませんが、詳細は非常に単純です。say()
メソッドは 1 つだけです。完了するには、以下の実行中のスクリーンショットを参照してください。
次に、実行中のスクリーンショットがあります。ここでの -encoding utf-8 は、使用するエンコード文字セットを指定していることに注意してください。これは、cmd で実行されるコードがコンパイルされない可能性があるためです。中国人がいる。
以上がJavaクラスローダーURLClassLoaderの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。