利用classloader动态加载jar包

本文介绍了两种在Java中加载外部JAR包的方法。第一种是通过创建URLClassLoader实例并直接加载指定路径下的JAR包;第二种是通过系统类加载器,并使用反射调用addURL方法来扩展类路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种方法:
URL url= file.toURI().toURL();//将File类型转为URL类型,file为jar包路径
URLClassLoader urlClassLoader=new URLClassLoader(new URL[] {url});
Class c=urlClassLoader.loadClass("类名");
此种方法是构造一个新的URLClassLoader对象,利用该对象加载指定路径下的jar包,此种方法只能在此处加载该jar包中的类,调用其方法,不能在程序中的其他地方调用。如果将urlClassLoader声明为静态的则可以在其它地方调用

第二种方法:
URL url= file.toURI().toURL();//将File类型转为URL类型,file为jar包路径
//得到系统类加载器
URLClassLoader urlClassLoader= (URLClassLoader) ClassLoader.getSystemClassLoader();
//因为URLClassLoader中的addURL方法的权限为protected所以只能采用反射的方法调用addURL方法
Method add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class });                               
add.setAccessible(true);
add.invoke(urlClassLoader, new Object[] {url });
Class c=Class.forName("类名");
或者
Class c=urlClassLoader.loadClass("类名");
此种方法是得到系统类加载器,利用该加载器加载指定路径下的jar包,此种方法与java命令中的javac -cp是同等效果,都能在当前运行环境中改变CLASSPATH,所以利用该方法加载jar包后,在程序任一地方都能加载该jar包中的类,调用其方法。

导入多个jar包时,第一种方法加载jar包中的类时,需知道加载该jar包的URLClassLoader,第二种方法则不需要,可使用Class.forName("类名");加载类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值