在同一个package底下建立了两个类Class1,和Class2
在Class1的函数中写下: Class<?> clazz2 = ClassLoader.getSystemClassLoader().loadClass("Class2");
运行时报错:Exception in thread "main" java.lang.ClassNotFoundException: Class2
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at Package1.Class1.main(Class1.java:20)同一位置,如果改成:
Class<?> clazz2 = Class2.class;
就对了为什么?

解决方案 »

  1.   

    Class<?> clazz2 = ClassLoader.getSystemClassLoader().loadClass("Class2");是不是要加包名  所说在同一个包下  但是毕竟有双引号
      

  2.   

    后两句不理解就算了 前面那句话肯定理解吧 你加上包名试试看 比如 如果Class2在pack包下  那你就写Class<?> clazz2 = ClassLoader.getSystemClassLoader().loadClass("pack.Class2");
      

  3.   

    还有这个你也试试 Class.forName("pack.Class2").newInstance();
      

  4.   

    后面clazz2.newInstance();等等
    都没问题了。