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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李健_8 中级黑马   /  2012-10-12 17:31  /  1786 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李健_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.反射为什么这么麻烦   有什么好处

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
string str=(String)constractor.newInstance(new StringBuffer("abc"));
反射创建对象是先获得Class字节码,然后再获得其构造方法。它就是利用newInstance(Object... initargs)方法来创建对象实例,Object就是其构造函数需要传入的参数。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
徐梦侠 发表于 2012-10-12 17:42
string str=(String)constractor.newInstance(new StringBuffer("abc"));
反射创建对象是先获得Class字节码 ...

跟上述程序 那么他哪里获得字节了 newStringBuffer()不是已经创建对象了吗  为什么还要Instance创建对象
回复 使用道具 举报
本帖最后由 徐梦侠 于 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")来获得。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马