黑马程序员技术交流社区
标题:
反射方法调用的问题
[打印本页]
作者:
熊永标
时间:
2013-1-21 15:48
标题:
反射方法调用的问题
package cn.javastudy.p15.reflect.demo;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException
{
Class clazz=Class.forName("cn.javastudy.p15.reflect.demo.person");
Object obj=clazz.newInstance();
Method m=clazz.getMethod("main", String[].class);
//m.invoke(null, new String[]{"11","22","33"});//发生错误,因为invoke会把”new String[]{"11","22","33"}“
//拆包,因为为了兼容jdk1.5以前的版本,在jdk1.5之后的这个函数是接收一个数组,而之后接收的是一个可变参数.所以此处会按以前的方式处理.拆包之后,
// 发现类型不对,所以运行发生错误
//m.invoke(null, (Object)new String[]{"11","22","33"});
//此处会隐藏了数组的类型,变成了Object,会按可变参数形式传递,根据可变
//参数的定义,隐示创建一个Object数组,接收传进来的可变参数,然后拆分后,发现Object数组元素是一个数组类型,传进main方法当然就不会出错了。
m.invoke(null, new Object[]{new String[]{"11","22","33"}});
//此处jdk1.5以前的数组形式形式传递并拆包,发现数组元素是一个数组类型,传进main方法当然就不会出错了。
}
}
class person
{
private int age=20;
public String name="张三";
public static void main(String[] args)
{
for(String str:args)
{
System.out.println(str);
}
}
}
复制代码
作者:
许庭洲
时间:
2013-1-21 21:25
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2