时间:2021-05-20
下面讲展示的是从image.jar包中调用image.Buddy类的方法。
public class Main { public static void main(String[] args) { try { // 两种方式都可以 URL url = new File("/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image.jar").toURI().toURL();// URL url = new URL("file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image.jar"); URL[] urls = new URL[]{ url }; URLClassLoader loader = new URLClassLoader(urls); Class c = loader.loadClass("image.Buddy"); Object o = c.newInstance(); Method m = c.getMethod("sleep"); m.invoke(o); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } }}URL 是 "file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image.jar"
image.jar后面没有斜杠了
类名是 image.Buddy,不要因为URL里面有image就把image.Buddy中的image省略掉。
Buddy.class应该放在image文件夹内,然后打包image文件夹,而不是打包image文件夹里的所有文件,再把包名改成image.jar
补充:java动态载入指定的类或者jar包反射调用其方法
有时候。项目中会用到java动态载入指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大减少,更加的模块化。代码利用率更高。模式中的代理模式就用到java的这一机制。
下边就让我们通过代码来看看怎样实现此功能。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在Java中,调用类的方法有两种方式:对于静态方法可以直接使用类名调用,对于非静态方法必须使用类的对象调用。反射机制提供了比较另类的调用方式,可以根据需要指定要
父类能调用子类的方法吗?答:能。怎么做?把子类传递到父类的有参构造中,然后调用。使用反射的方式调用,你使用了反射还有谁不能调用的?!父类调用子类的静态方法。案例
常用的就是jni,jnative(基于jni封装了自己的jar包)注意:java调用dll,必须dll里做了对应的处理。列如:方法名必须为_java_包名_类名
很多主流框架都使用了反射技术.像ssh框架都采用两种技术xml做配置文件+反射技术.与反射有关的类包.java.lang.reflect.*;和java.lan
抽包,就是打jar包,将某些代码打成一个jar包给虽人使用。eclipse导出jar包的方式: 1、右键项目。 2、选择export。 3、选择java下