原因:虽然同一个包中的类可以直接引用。但类名前的包名已默认由编译器加上去了。通过Class.forName(className)方式加载类的时候,如果不加包名则默认在 default 包中去找,所以找不到。因此用Class.forName(className)方式加载类的时候应加上包名。
JAVA反射练习时:
Exception in thread "main" java.lang.ClassNotFoundException: FansheTest.Service1
File SpringConfigFile=new File("/Users/zhang/Desktop/spring.txt");
Properties SpringConfig=new Properties();
SpringConfig.load(new FileInputStream(SpringConfigFile));
String ClassName=(String) SpringConfig.get("class");
System.out.println("ClassName===="+ClassName);
String MethodName=(String) SpringConfig.get("method");
System.out.println("MethodName===="+MethodName);
//根据类名创建对象
Class clazzz=Class.forName(ClassName);
spring.txt文件:项目结构:
加载类时:会抛出ClassNotFoundException 异常,本来以为Service1类和当前FansheTest类在同一个包下 可以直接调用,结果运行抛出异常。
解决方法:
Spring.txt中加上包名字.
Java反射加载类失败
本文介绍了在使用Java反射机制加载类时遇到ClassNotFoundException的原因及解决办法。当试图通过Class.forName()方法加载类时,若未指定完整的包路径,则默认会在默认包中查找,从而导致异常。文章提供了具体的代码示例,并给出了正确的解决方案。
1270

被折叠的 条评论
为什么被折叠?



