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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

程艳艳

黑马帝

  • 黑马币:0

  • 帖子:19

  • 精华:0

在看到反射中执行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"}});这种方式呢?还有这个方法什么大概都在什么时候用呢?

4 个回复

倒序浏览
黑马网友  发表于 2011-7-26 23:08:59
沙发
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:43
藤椅
mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
表示调用哪个方法
null表示要调用静态方法
new Object[]{new String[]{"111","222","333"}}为参数的值
回复 使用道具 举报
Sponge 黑马帝 2011-12-16 21:27:54
板凳
匿名者 发表于 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:17
报纸
匿名者 发表于 2011-7-26 23:08
mainMethod是在 Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class ...

还是这个问题,为什么不直接用mainMethod.invoke(null, new String[]{"111","222","333"});?后面的那个参数不是String数组就可以吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马