URLClassLoader memo(转)

项目中,加载指定的类反射调用方法一直报类找不到,经过数百次的测试,对这种问题有了一个重新的认识,特总结、记录、分享如下:

1、路径中尽可能用"/"或者File.separator()而非“\”,路径中“\”是windows平台的,linux平台中是“/”,java中也是用“/”作为路径的,所以为了跨平台和更规范,建议采用前者

2、在当前的环境中获取绝对路径后,尽可能的replace(“\”,"/")一下,windows平台开发中这个很需要的

3、new File中字符串路径如果是文件夹后边可以不带“/”,但如果你直接是new URL("路径")来指定加载类的路径的话,后边必须追加“/”否则会以文件处理找不到的

4、由file转成URL时,建议别采用File.toURL()此方法已经被JDK1.6及以后版本淘汰了,属于过时API,应该采用file.toURI().toURL()方法

5、路径中非法字符会这转成URI的过程中变成"%20",不过不会影响程序的运行,路径中如有汉字也是可以的,不要过于担心这一点,不过调试一下小心乱码。建议路径还是非汉字正常字符组成的比较好。

6、最最重要的一点,就是加载的类如果有包名,如com..text;,一定要把类的路径写成com文件的上一层,而load("类名")时,一定要写上包名如com..text.Formatter,网上很多简单的测试类都没注意到这一点,如果你路径中非要写上包名而且测试还通过了,恭喜你,你碰巧了,因为如果路径不对类加载器load不到的话会去当前类的路径下边去找,你肯定把这个被加载的测试类和加载的写在一个包下了。
————————————————
版权声明:本文为CSDN博主「Java我人生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chenleixing/article/details/46422115

【例】
URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{new File(jarAddress).toURI().toURL()},
Thread.currentThread().getContextClassLoader());
urlClassLoader.loadClass(className);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 通过iOS 8app extensions,我们可以选择多种方式去分享我们app的功能。Document Prov...
    _浅墨_阅读 12,000评论 4 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,292评论 19 139
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666阅读 5,298评论 0 6
  • 导入模块 静态导入 (1)import 模块(2)from 模块 import 函数:可以选定要导入的函数,逗号隔...
    dawsonenjoy阅读 1,846评论 0 0
  • 前言 SDK开发和APP并不一样,APP开发简单点直接开个项目撸就是了,但是SDK需要打包成库,然后才能拿这个库去...
    子天々君阅读 11,166评论 20 31