本帖最后由 The_Wizard 于 2013-12-10 09:04 编辑
不知道对不对。求大家意见,能给内容补充就更好了。谢谢可变参数像是正则表达式,是一种规则。只要传递的参数符合就可以调用该函数,执行它封装的代码。
参照函数:
Mehod类:public Object invoke(Object obj, Object... args)
invoke方法1.5之前:invoke(Object obj, Object[] args)
可变参数为了能兼容以前的(就是1.5以上的JRE能运行1.5之前的程序),所以可变参数更倾向于数组。
可变参数是引用类型:
给函数传递参数。先查看该参数是否是引用数组,如果是,则编译器(应该是编译时,不是运行时)将引用数组拆分成若干个引用。用反射的方式调用一个类的main方法(就最后两句代码。课程是毕老师的22-23,cn.itcast.day1.ReflectTest):
//22-23
//Method:invoke()
//注意:如果该方法是静态的,则 invoke() 的第一个参数(目标对象)为null。
Method methodCharAt = String.class.getMethod("charAt", int.class);
System.out.println(methodCharAt.invoke(str1, 1));
System.out.println(methodCharAt.invoke(str1, new Object[]{2}));
//TestArguments.main(new String[]{"111","222","333"});
//主函数需要传递参数:写好参数点击应用,可以让程序记住参数。后边就算修改了代码,也可以直接运行。
// String startingClassName = args[0];
String startingClassName = "cn.itcast.day1.TestArguments";
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
// mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
mainMethod.invoke(null, (Object)new String[]{"111","222","333"});
可变参数是基本类型:
貌似跟引用类型一样。不过应该还有两个问题:
1,怎样用反射获取一个带有可变参数的方法。例如:cn.itcast.day1.VarableParameter的add方法。
2,将cn.itcast.day1.VarableParameter的add方法,修改成add(int x, int[] args)。用反射...现在Method m对应这个函数,此时要用invode方法调用这个函数能像前面的调用main的方式一样吗?main的参数是String[] args,而这里add的参数是int[] args。他们会有不同吗?
|