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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们知道启动Java程序的main方法的参数是一个字符串数组,按照jdk1.5的语法,整个数组是一个参数,
而按照jdk1.4的语法,数组中的每一个元素对应一个参数,当把一个字符串数组作为参数传递给invoke方法时,
javac会按照jdk1.4的语法进行处理,因为jdk1.5肯定要兼容jdk1.4的语法,也就是把数组打散成若干个单独的参数,
所以也就会出现上面的异常了。
我们知道了原因,那么也就好解决了,既然字符串数组会拆包成一个个的对象参数,那么我们就在这个字符串的外面再套上一层外衣,
当拆包的时候只是拆掉外面的那层,里面的字符串数组就可以作为一个单独的参数进行传递了
  1. public static void mainMethord() throws Exception {
  2.                
  3.                
  4.                 Method m = MethodMain.class.getMethod("main", String[].class);
  5.                
  6. //                调用main()是编译器会做特殊处理, 不把参数当做数组看待, 将其打散成若干个参数, 会出现参数类型不匹配异常
  7.                 m.invoke(null, new Object[]{new String[]{"1"}});
  8.                 m.invoke(null, (Object)new String[]{"1"});
  9.                
  10.         }
复制代码


一起交流,一起进步

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马