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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊永标 中级黑马   /  2013-1-21 15:48  /  1081 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package cn.javastudy.p15.reflect.demo;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.lang.reflect.Method;

  6. public class ReflectDemo {
  7.         public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException
  8.         {
  9.                 Class clazz=Class.forName("cn.javastudy.p15.reflect.demo.person");
  10.                 Object obj=clazz.newInstance();
  11.                 Method m=clazz.getMethod("main", String[].class);
  12.                 //m.invoke(null, new String[]{"11","22","33"});//发生错误,因为invoke会把”new String[]{"11","22","33"}“
  13.                 //拆包,因为为了兼容jdk1.5以前的版本,在jdk1.5之后的这个函数是接收一个数组,而之后接收的是一个可变参数.所以此处会按以前的方式处理.拆包之后,
  14.                 // 发现类型不对,所以运行发生错误
  15.                 //m.invoke(null, (Object)new String[]{"11","22","33"});
  16.                 //此处会隐藏了数组的类型,变成了Object,会按可变参数形式传递,根据可变
  17.                 //参数的定义,隐示创建一个Object数组,接收传进来的可变参数,然后拆分后,发现Object数组元素是一个数组类型,传进main方法当然就不会出错了。
  18.                 m.invoke(null, new Object[]{new String[]{"11","22","33"}});
  19.                 //此处jdk1.5以前的数组形式形式传递并拆包,发现数组元素是一个数组类型,传进main方法当然就不会出错了。
  20.         }
  21.        
  22. }
  23. class person
  24. {
  25.         private int age=20;
  26.         public String name="张三";
  27.         public static void main(String[] args)
  28.         {
  29.                 for(String str:args)
  30.                 {
  31.                         System.out.println(str);
  32.                 }
  33.         }
  34. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马