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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小小Y 中级黑马   /  2014-11-25 07:46  /  782 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1 Constructor类
   一个Method代表一份字节码里面的一个方法
       一个Constructor代表字节码里面的一个构造方法
   得到某个类所有的构造方法:
  Constructor[] constructor =Class.forName("java.lang.String").getConstructors();得到某一个构造方法:
  Constructor constructor =Class.forName("java.lang.String").getConstructor(StringBuffer class);

   创建实例对象:
   通常方式:Stringstr = new String(StringBuffer("abc"));
   反射方式:Stringstr =(String)constructor.newInstance(new StringBuffer("abc"));
   //调用获得的方法时要用到上面相同类型的实例对象Class.newInstance()方法:
   例子:Stringobj = (String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。用到了缓存机制来保存默认构造方法的实例对象;找不带参数的构造方法,可以省事;

2、Filed类
   代表某个类中的一个成员变量;
3、 Method类
   代表某个类中的一个成员方法得到类中的某个方法:
4、用反射方式执行某个类中main方法时,因为jdk1.4的语法是将传入的字符串数组解包成数组元素个数的参数,所以不能Class.forName("类名").getMethod("main",String[]).invoke(null,newString[]{"xxx"});这样做会出现参数类型不对的问题。
       解决办法:将传入的数组装进数组里,即:methodMain.nivoke(null,newObject[]{new String[]{"xxx"}});或者直接将数组转成Object:methodMain.nivoke(null,(Object){newString[]{"xxx"});这样,编译器就编译时就不把参数当数组看待了,就免去了拆数组的错误了。

5、数组的反射
   具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象;
   基本类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用;   Array工具类用于完成对数组的反射操作;

0 个回复

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