ClassLoader载入指定的类需注意六个细节或报ClassNotFundEception异常总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ClassLoader载入指定的类需注意六个细节或报ClassNotFundEception异常总结相关的知识,希望对你有一定的参考价值。

项目中,载入指定的类反射调用方法一直报类找不到,经过数百次的測试。对这样的问题有了一个又一次的认识,特总结、记录、分享例如以下:

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不到的话会去当前类的路径下边去找,你肯定把这个被载入的測试类和载入的写在一个包下了。

 

 

 

 

以上是关于ClassLoader载入指定的类需注意六个细节或报ClassNotFundEception异常总结的主要内容,如果未能解决你的问题,请参考以下文章

类加载机制:全盘负责和双亲委托

使用PowerMockito.whennew的时候,注解preparefortest里面的类需要是mock的new代码所在的类的对象

android classloader双亲托付模式

Java中用ClassLoader载入各种资源(类文件web资源)的方法

Java中用ClassLoader载入各种资源(类文件web资源)的方法

Java类载入器 ClassLoader的解析