黑马程序员技术交流社区

标题: 关于反射 [打印本页]

作者: 小小Y    时间: 2014-11-25 07:46
标题: 关于反射
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工具类用于完成对数组的反射操作;






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2