黑马程序员技术交流社区

标题: 关于主函数的反射问题 [打印本页]

作者: 邵天强    时间: 2012-11-15 20:56
标题: 关于主函数的反射问题
本帖最后由 邵天强 于 2012-11-16 08:09 编辑

在练习反射的时候我遇到了一个这样的问题,需要朋友们帮忙解决一下:
假设有一个Student类
class Student{
       //静态方法
       public static void test1(int age){
        System.out.println(age);
     }
      //主函数
       public static void main(String[]args){
      System.out.println(args.length);
    }
}
我在另一个测试类中反射上面的两个方法:
public class ReflectDemo2 {
        @Test
          public void test1()throws Exception{
               //获取Student的Class对象
           Class cl=Class.forName("com.itheima.reflect.Student");
              //调用c1对象的getDeclaredMethod方法获取Method对象
           Method m=cl.getMethod("test1",int.class);
          //因为是静态方法,所以不需要对象
           m.invoke(null,23);
  }
@Test
public void test2()throws Exception{
  //获取Student的Class对象
  Class cl=Class.forName("com.itheima.reflect.Student");
  //调用c1对象的getDeclaredMethod方法获取Method对象
  Method m=cl.getMethod("main",String[].class);
  //因为是静态方法,所以不需要对象
  m.invoke(null,new String[]{"黑马_1","黑马_2"});
}
}
在反射静态方法时,能够成功的运行,而反射主函数时,却出现了错误
java.lang.IllegalArgumentException: wrong number of arguments
错误:说不正确的参数个数,主函数也不是静态方法吗?跟前面的静态方法反射有什么区别吗?

作者: jerry2627    时间: 2012-11-15 23:34
那是因为jdk兼容了1.5之前的版本,你的main方法传过去的参数jvm会进行拆包处理,处理后就是两个参数了。所以会报错。
m.invoke(null,new String(new String[]{"黑马_1","黑马_2"}));
这样处理后就可以避免上面的情况发生了





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