【问题标题】:Reflection - Sample Code - ClassNotFoundException Error反射 - 示例代码 - ClassNotFoundException 错误
【发布时间】:2014-05-15 13:10:33
【问题描述】:

我正在尝试这个反射示例代码:

import java.lang.reflect.Method;

class Test 
{

  public Test() 
  { }

        public void sayHello() 
        {
             System.out.println("Hello");
        }
}

  public class Foo 
  {    

      public static void main (String[] args) throws Exception 
      {
          Class<?> clazz = Class.forName("Test");
          Method method = clazz.getMethod("sayHello");
          Object instance = clazz.newInstance();
          method.invoke(instance);

       }
   }

显示的错误如下:

 run:
    Exception in thread "main" java.lang.ClassNotFoundException: Test
     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:306)
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
     at java.lang.Class.forName0(Native Method)
     at java.lang.Class.forName(Class.java:169)
     at foo.Foo.main(Foo.java:29)
 Java Result: 1

如何,我解决了代码中的上述错误。 我也给了 Foo.Test 但它根本不起作用。

请帮我解决这个问题。 谢谢你

【问题讨论】:

  • 你要加载的Test类放在哪个包里?
  • 如果在编译和运行时类路径中都有可用的类,则可以使用类文字“clazz = Test.class”,因为它的编译时间检查(编译器会告诉你是否它找不到类)。如果类并不总是在类路径上,或者在编译时不知道(例如 JDBC 驱动程序),classForName() 是要走的路

标签: java object reflection classnotfoundexception dynamicobject


【解决方案1】:

从您提供的堆栈跟踪来看,您似乎有一个包 foo.为了使它起作用,请尝试将您的实现替换为以下内容:

Class<?> clazz = Class.forName("foo.Test");

注意永远记住,要使反射起作用,您将需要提供完整的类名,包括包。

【讨论】:

  • |谢谢,正如你所说,我正在使用 Foo.Test foo.Test 有效。我不得不在小写字母中使用 F。非常感谢。
  • 亲爱的Pat Wanju,您如此优雅地解决了我的错误,您能解决我的这个问题吗?这将有很大的帮助!作为我的项目,我需要尽快完成它。 [链接](stackoverflow.com/questions/23680503/…)
【解决方案2】:

您必须提供类的完全限定名称(包括包和类的名称)。例如:

Class<?> clazz = Class.forName("foo.Test");

【讨论】:

  • |谢谢,我正在使用 Foo.Test,正如 PAT WANJAU 所说,foo.Test 有效。我不得不在小写字母中使用 F。还是谢谢你。
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2016-04-11
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多