黑马程序员技术交流社区

标题: 反射创建对象 [打印本页]

作者: 李健_8    时间: 2012-10-12 17:31
标题: 反射创建对象
本帖最后由 李健_8 于 2012-10-12 18:07 编辑

·创建实例对象
  通常方式:
String str=new String(new StringBuffer("abc"));
反射方式:
Constructor constractor1=String.class.getConstructor(StringBuffer.class);
  String str=constractor1.newInstance(new StringBuffer("abc") );
反射创建对象完成看不懂
1.newInstance是什么东东
2.他不是已经创建了对象 为什么。。。。
3.反射为什么这么麻烦   有什么好处

作者: 徐梦侠    时间: 2012-10-12 17:42
string str=(String)constractor.newInstance(new StringBuffer("abc"));
反射创建对象是先获得Class字节码,然后再获得其构造方法。它就是利用newInstance(Object... initargs)方法来创建对象实例,Object就是其构造函数需要传入的参数。

作者: 李健_8    时间: 2012-10-12 17:49
徐梦侠 发表于 2012-10-12 17:42
string str=(String)constractor.newInstance(new StringBuffer("abc"));
反射创建对象是先获得Class字节码 ...

跟上述程序 那么他哪里获得字节了 newStringBuffer()不是已经创建对象了吗  为什么还要Instance创建对象
作者: 徐梦侠    时间: 2012-10-12 18:13
本帖最后由 徐梦侠 于 2012-10-12 18:21 编辑
李健_8 发表于 2012-10-12 17:49
跟上述程序 那么他哪里获得字节了 newStringBuffer()不是已经创建对象了吗  为什么还要Instance创建对象 ...


因为newInstance()的括号里面就是传的构造函数的参数。这个例子中,传入的是一个StringBuffer对象,说明调用的是String的这个构造函数public String(StringBuffer buffer)。它的参数本类就是一个对象,与我们现在要创建的String字符串不是同一个,这里用Instance的目的是创建一个包含StringBuffer中的字符的、新的字符串。
字节码可以从方法String.class或者Class.forName("java.lang.String")来获得。




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