黑马程序员技术交流社区

标题: 用反射方式执行某个类中的main方法,不是很理解 [打印本页]

作者: 程艳艳    时间: 2011-7-26 23:05
标题: 用反射方式执行某个类中的main方法,不是很理解
在看到反射中执行main方法时,有一块不是很理解,具体的代码如下,也就是老师讲的那些
package cn.itcast.day1;

import java.lang.reflect.Method;

public class MethodReflectPoint
{

        /**
         * method类代表某个类中的成员变量
         * @param args
         */
        public static void main(String[] args) throws Exception
        {
                String str1 ="abc";
               
                str1.charAt(1);
                Method methodCharAt = String.class.getMethod("charAt", int.class);
                System.out.println(methodCharAt.invoke(str1, 1));
                System.out.println(methodCharAt.invoke(str1, new Object[]{2}));//数组是从0开始的
                //普通的调用方法
                //TestArguments.main(new String[]{"111","222","ccc"});
                String startingClassName = args[0];
                Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
                //mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
                mainMethod.invoke(null, (Object)new String[]{"111","222","333"});
}

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

在用反射调用这个main方法的时候,为什么要用mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});这种方式呢?还有这个方法什么大概都在什么时候用呢?
作者: 匿名    时间: 2011-7-26 23:08
mainMethod是在 Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class); 这个代码中获取方法的返回值。
所以要用mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});第一个参数说明返回值为空,第二个说明参数。
至于在什么时候用可以理解为就是类里的一个普通方法,只是他的名字是“main”
作者: 匿名    时间: 2011-7-26 23:25
mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
表示调用哪个方法
null表示要调用静态方法
new Object[]{new String[]{"111","222","333"}}为参数的值
作者: Sponge    时间: 2011-12-16 21:27
匿名者 发表于 2011-7-26 23:25
mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
表示调用哪个方法
null表示要 ...

为什么不可以直接用mainMethod.invoke(null, new String[]{"111","222","333"});呢??我知道老师也讲过,不过还是没有搞透彻,欢迎探讨。
作者: Sponge    时间: 2011-12-16 21:29
匿名者 发表于 2011-7-26 23:08
mainMethod是在 Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class ...

还是这个问题,为什么不直接用mainMethod.invoke(null, new String[]{"111","222","333"});?后面的那个参数不是String数组就可以吗?




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