A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程潇 中级黑马   /  2012-7-20 13:36  /  2243 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我想通过反射调用Person类中的run方法,但是报ClassNotFoundException异常。
可是Person这个类的class文件是存在的,请教各位,为什么回报这个异常

代码如下:

import java.lang.reflect.Method;

public class Test
{
       public static void main(String args[]) throws Exception
       {
                            Class cls = Class.forName("Person");
                        Method method = cls.getMethod("run", null);
                        method.invoke(cls.newInstance(), null);
       }
}

class Person{
        public void run(){
                System.out.println("Person run");
        }
}

报如下错误:
Exception in thread "main" java.lang.ClassNotFoundException: Person
        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 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at score.technology.Test.main(Test.java:9)



8 个回复

倒序浏览
import java.lang.reflect.Method;

public class Test
{
       public static void main(String args[]) throws Exception
       {
                            Class cls = Class.forName("Person");
                        Method method = cls.getMethod("run");//我想是这样的,你的run方法没有接受参数,就可以不用写了,你在这里写了个null,程序就会去找一个带参数的run方法.只不过你 传的参数是null
                        method.invoke(cls.newInstance());//这里也是一样
       }
}

class Person{
        public void run(){
                System.out.println("Person run");
        }
}
//
回复 使用道具 举报
个么   在我的机器上运行的结果没有报错
结果是:Person run
回复 使用道具 举报
周玉龙 发表于 2012-7-20 13:48
import java.lang.reflect.Method;

public class Test

尝试了一下你的方法,还是报相同的异常
回复 使用道具 举报
本帖最后由 王璐 于 2012-7-20 13:59 编辑

import java.lang.reflect.Method;

public class Test
{
       public static void main(String args[]) throws Exception
       {
                            Class cls = Class.forName("Person");    //Person得加上完整的包名,加上后就可以运行了
                        Method method = cls.getMethod("run", null);
                        method.invoke(cls.newInstance(), null);
       }
}

class Person{
        public void run(){
                System.out.println("Person run");
        }
}
“我添加的是我包,你包名补上”



评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
我运行没有错啊!
回复 使用道具 举报
public static void main(String[] args) throws Exception
{
        Method method = Person.class.getMethod("run",String.class);
        method.invoke(Person.class.newInstance(), "abc");
}
class Person{
        public void run(String str){
                System.out.println(str);
        }
}
回复 使用道具 举报
程潇 中级黑马 2012-7-20 14:03:14
8#
王璐 发表于 2012-7-20 13:56
import java.lang.reflect.Method;

public class Test

多谢了,加上包名以后可以了
回复 使用道具 举报
程潇 中级黑马 2012-7-20 14:04:53
9#
谢谢大家的回答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马