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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luofeng 中级黑马   /  2014-9-19 23:43  /  932 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么存在constructor类,它是为了解决什么问题?刚看到反射,看的不太懂。

4 个回复

倒序浏览
Constructor是描述构造方法的一个类,可以用反射获取某个类(这个类是你所要操作的类)中的某个构造方法对应的Constructor对象,再由这个对象调用newInstance()方法就可以创建出一个此类的实例对象

回复 使用道具 举报
那是构造函数
回复 使用道具 举报
本帖最后由 王文博 于 2014-9-20 23:41 编辑
  1. <p><p><p>个人总结了一下,不知道你能不能看得懂。</p><p>
  2. Constructor类代表某个类中的一个构造方法;</p><p>
  3. import java.lang.reflect.Constructor;
  4. 得到某个类中所有的构造方法:
  5. public class Reflect
  6. {
  7.         public static void main(String[] args) throws Exception
  8.         {
  9.                 /* new String(new StringBuilder("abc"));
  10.                  * 用StringBuilder对象传给String构造方法,用这个构造方法在new String()
  11.                  * 现在我们要用反射的方式,实现同样的效果:
  12.                  * 先拿到构造方法:String.class代表一个字节码(对象),对象名.getConstructor拿到这个类的构造方法
  13.                  * 再拿到这个构造方法里的参数StringBuilder类型,最后返回给这个对象的相对应的类型 Constructor
  14.                  */
  15.                    Constructor cons = String.class.getConstructor(StringBuilder.class);
  16.                 /* 这俩行代码用了俩个StingBuilder,第一个表示:StringBuilder选择什么参数的构造方法[是类型]          </p><p>                 *  第二个表示:用这个构造方法时候还要传递与之对应的对象进去[是对象]
  17.                  * newInstance是new一个构造方法,如果里面有参数一定不能忘了写![cons.newInstance("abc");错误示范]
  18.                  */
  19.                 String str = (String)cons.newInstance(new StringBuilder("abc"));
  20.                 System.out.println(str.charAt(2)); //c
  21.                 /*
  22.                  * 分析这三行代码执行:
  23.                  * 在编译期间,严格进行语法检查,并没有执行"="号右边的代码,只是生成二进制代码(0101),放进内存里,并没有执行;
  24.                  * 编译期间只知道是一个构造方法,并不知道是哪个类上的构造方法,因为newInstance返回类型是Object</p><p>                 * 而这个构造方法返回的是String类型,所以要强制转换成相应类型;
  25.                  * 在运行期间,才会执行"="号右边的代码,
  26.                  */
  27.         }
  28. } </p>
复制代码



回复 使用道具 举报
这个现在能懂了。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马