main方法的反射


反射的确是java中很厉害的一项技术,但在main方法的反射中却不能按照常规那样反射,举例说明:

class Student
{
     public static void sa(int num)
    {
        System.out.println(num);
    }

     public static void main(String [] args)
    {
         System.out.println("main");
    }
}

对于上面的sa方法,我只需使用如下代码:

public void test5()throws Exception
	{
		Class clazz=Class.forName("cn.lcu.day01.Student");
		Method m=clazz.getMethod("sa", int.class);
		m.invoke(null, 20);
	}
就能得到结果20
但如果用如下代码反射main方法的话,则会报异常:java.lang.IllegalArgumentException: wrong number of arguments
public void test6()throws Exception
 {
  Class clazz=Class.forName("cn.lcu.day01.Student");
  Method m=clazz.getMethod("main", String[].class);
  //m.invoke(null, (Object)new String[]{"aa","bb"});
  //m.invoke(null, new Object[]{new String[]{"aa","bb"}});
  m.invoke(null, new String[]{"aa","bb"});
 }
 
这是因为在java升级过程中,会兼容1.4版本,而1.4版本反射的时候用的是数组参数,
1.4 Method.invoke(Object obj, Object obj[])
1.5 Method.invoke(Object obj, object ...obj)
这样的话,invoke中传入的String数组会被拆开,成("aa","bb"),所以就会报上边的异常。
解决方法: m.invoke(null, (Object)new String[]{"aa","bb"});
或者 m.invoke(null, new Object[]{new String[]{"aa","bb"}});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值