反射 - 示例代码 - ClassNotFoundException错误

时间:2014-05-15 13:10:34

标签: java object reflection classnotfoundexception dynamicobject

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

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,但它根本不起作用。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

从您提供的堆栈跟踪中,您似乎有一个包foo。为了实现此目的,请尝试使用以下内容替换您的实现:

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

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