黑马程序员技术交流社区

标题: 关于反射 Method出错 [打印本页]

作者: wudongzhe    时间: 2013-2-20 18:03
标题: 关于反射 Method出错
本帖最后由 吴东泽 于 2013-2-20 23:18 编辑

代码如下报错,找不到原因。


package net.csdn.a;

import java.lang.reflect.Method;

public class MethodDemo {

        /**
         * @param args
         * @throws Exception
         * @throws SecurityException
         * @throws NoSuchMethodException
         */
        public static void main(String[] args) throws NoSuchMethodException, SecurityException, Exception {
                //第一种调用方法
                MethodDemo2.main(new String[]{"q","c"});
               
                //method方法
                String className=args[0];
                Method mainMethod=Class.forName(className).getMethod("main", String.class);
                mainMethod.invoke(null,(Object)new String[]{"q","c"});
        }

}

class MethodDemo2{
        
        public static void main(String[] args){
                for(String arg:args){
                        System.out.println(arg);
                }
        }
}


作者: wudongzhe    时间: 2013-2-20 18:04
错误代码:
Exception in thread "main" java.lang.NoSuchMethodException: net.csdn.a.MethodDemo2.main(java.lang.String)
        at java.lang.Class.getMethod(Unknown Source)
        at net.csdn.a.MethodDemo.main(MethodDemo.java:19)
作者: 黄锦成    时间: 2013-2-20 18:22
main方法的参数是String[]类型的,不是String,你应该使用
Method mainMethod=Class.forName(className).getMethod("main", String[].class);
作者: 寇弘禄    时间: 2013-2-20 18:27
public class MethodDemo {

        /**
         * @param args
         * @throws Exception
         * @throws SecurityException
         * @throws NoSuchMethodException
         */
        public static void main(String[] args) throws NoSuchMethodException, SecurityException, Exception {
                //第一种调用方法
                MethodDemo2.main(new String[]{"q","c"});
               
                //method方法
                String className=args[0];    //这个className为什么是args[],应该改成"MethodDemo2"吧
                Method mainMethod=Class.forName(className).getMethod("main", String.class);    //这个地方应该是String[].class
                mainMethod.invoke(null,(Object)new String[]{"q","c"});
        }

}

class MethodDemo2{
        
        public static void main(String[] args){
                for(String arg:args){
                        System.out.println(arg);
                }
        }
}

测完运行结果是
q
c
q
c

作者: wudongzhe    时间: 2013-2-20 23:21
嗯谢谢啦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2