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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mengxiang1993 中级黑马   /  2015-2-10 20:25  /  685 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class InvokeMain {

  2.         public static void main(String[] args) throws Exception {
  3.                 // 传递的类名
  4.                 String className = args[0];
  5.                 // getMethod("方法名字","形参类型");
  6.                 Method m = Class.forName(className).getMethod("main", String[].class);

  7.                 // invoke(参数1:调用该方法的对象,静态方法不是对象的,所以为null,参数2:要传递的值)
  8.                 m.invoke(null, (Object) new String[] { "abc", "wo" });

  9.                 Method m1 = Class.forName("com.reflect.ReflectMain").getMethod("f",
  10.                                 int[].class);

  11.                 m1.invoke(null, new int[] { 1, 2, 3 });

  12.         }

  13. }

  14. class ReflectMain {

  15.         public static void main(String[] args) {
  16.                 for (String s : args) {
  17.                         System.out.print(s);
  18.                 }
  19.         }

  20.         public static void f(int[] a) {
  21.                 for (int b : a) {
  22.                         System.out.print(b);
  23.                 }
  24.         }

  25. }
复制代码
张老师说,按照JDK1.5的语法,整个数组是一个参数,而按照JDK1.4的语法,数组中每一个元素对应一个参数。JDK1.5肯定要兼容JDK1.4,
所以javac只把它当作JDK1.4语法进行理解,因此会出现参数类型不对。
所以两种方法: 1 强转为Object 类型 即 (Object) new String[] { "abc", "wo" });
                         2.创建object【】,数组里存放一个字符串数组 即 new Object[]{new String[]{"abc","ww"}}
下来,我用int[]数组做了个实验,发现不用转换成object类型也行,到底是为什么呢?

2 个回复

倒序浏览
我想了个原因,拆开数组的每一个元素是Object元素,编译器才拆包,如果是int[] ,编译器不会拆包,只会讲整个数组看成一个object
回复 使用道具 举报
二楼正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马