黑马程序员技术交流社区

标题: 用反射的方式调用某个主函数的问题 [打印本页]

作者: 徐帅    时间: 2012-7-12 10:49
标题: 用反射的方式调用某个主函数的问题
本帖最后由 徐帅 于 2012-7-17 16:09 编辑

package cn.xushuai.day1;
在给主函数传参的时候因为JDK1.4会拆包,即把数组打散成若干个独
我这里用了有两种方式,
第一种是张老师的把整个String数组看做是Object[ ]数组的一个元素(报错,说有语法错误?)
第二种是李老师的。直接把数组封装成对象,(运行正确)

import java.lang.reflect.Method;

public class MainArgs {
        public static void main(String[] args)throws Exception{        
        
                String startingClassName = args[0];
                Method mainMethod = Class.forName(startingClassName).getMethod("main",String[].class);
                mainMethod.invoke(null, new Object[](new String[]{"121","fsg","234"}));
                mainMethod.invoke(null, (Object)new String[]{"121","dsf","fsf"});
                }
        }

class TestArgs{         
        public static void main(String[] args){

        for(String arg: args){
                System.out.println(arg);
                }
        }
}

UntitledImage4.png (4.9 KB, 下载次数: 15)

错误信息

错误信息

作者: 陆强强    时间: 2012-7-12 11:04
import java.lang.reflect.Method;

class MainArgs {
        public static void main(String[] args)throws Exception{        
        
               
                Method mainMethod = TestArgs.class.getMethod("main",String[].class);//这里是要调用的主函数所在类的字节码TestArgs.class
                mainMethod.invoke(null, new Object[]{new String[]{"121","fsg","234"}});//Object数组是把String数组当成一个元素,所以用大括号
                mainMethod.invoke(null, (Object)new String[]{"121","dsf","fsf"});
                }
        }

class TestArgs{         
        public static void main(String[] args){

        for(String arg: args){
                System.out.println(arg);
                }
        }
}
作者: 王达    时间: 2012-7-12 11:08
本帖最后由 王达 于 2012-7-12 11:11 编辑

import java.lang.reflect.Method;

public class MainArgs {
        public static void main(String[] args)throws Exception{        
        
                String startingClassName = args[0];
                Method mainMethod = Class.forName(startingClassName).getMethod("main",String[].class);
                mainMethod.invoke(null, new Object[](new String[]{"121","fsg","234"}));    你这里new Object[]{new String[]{"121","fsg","234"} 不应该是括号。。。。。                mainMethod.invoke(null, (Object)new String[]{"121","dsf","fsf"});
                }
        }

class TestArgs{         
        public static void main(String[] args){

        for(String arg: args){
                System.out.println(arg);
                }
        }
}
红字那里有错误
作者: 苑占丽    时间: 2012-7-12 11:24
  mainMethod.invoke(null, new Object[](new String[]{"121","fsg","234"}));
应该改为:
  mainMethod.invoke(null, new Object[]{new String[]{"121","fsg","234"}});
作者: 徐帅    时间: 2012-7-12 17:48
陆强强 发表于 2012-7-12 11:04
import java.lang.reflect.Method;

class MainArgs {

谢谢啊。已修正




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