main方法的反射

来源:互联网 发布:简单校园网络规划设计 编辑:程序博客网 时间:2024/05/16 18:42


反射的确是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 argumentspublic 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"}});
原创粉丝点击