ClassLoader加载指定的类需注意六个细节或报ClassNotFundEceptio

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

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加载指定的类需注意六个细节或报ClassNotFundEceptio

相关文章:

你感兴趣的文章:

标签云: