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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯子的昨天 中级黑马   /  2014-2-6 15:13  /  1115 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 疯子的昨天 于 2014-2-6 15:14 编辑

  String str =(String) cons.newInstance(new StringBuffer("abc"));这句话。。能帮忙翻译翻译吗?
前面是一个字符串类型的对象后面又有一个字符串缓冲区。。。这是什么意思?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 新年快乐!

查看全部评分

4 个回复

倒序浏览
如果我没猜错,这应该是通过String类的字节码文件拿到String类中一个参数为StringBuffer的构造器对象。利用构造器创建对象实例时,如果构造器是空参数构造函数,那么newInstance方法不需要传入任何参数。由于拿到的是StringBuffer为参数的构造函数,因此用newInstance方法创建对象时要传入一个StringBuffer类对象的参数。  String str =(String) cons.newInstance(new StringBuffer("abc"));相当于String str=(String)new String(new StringBuffer("abc"));

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!新年快乐!

查看全部评分

回复 使用道具 举报
本帖最后由 陪你等日出 于 2014-2-7 03:03 编辑

cons是通过反射从String类中获得的构造方法,cons.newInstance(new StringBuffer("abc"))代表通过构造方法获得StringBuffer类型的实例对象,然后将StringBuffer强转成String类型再赋值给String类型的str,完整代码应该如下:
  1. import java.lang.reflect.Constructor;

  2. public class ReflectTest {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) throws Exception{
  7.                 // TODO Auto-generated method stub
  8.                 //通过反射获取构造函数
  9.                 Constructor cons = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
  10.                 String str = (String) cons.newInstance(new StringBuffer("abc"));
  11.                 System.out.println(str);
  12.         }

  13. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

回复 使用道具 举报
关键是这个cons,这个你什么个什么类型对象,是发射获得的,还是其他对象什么。这里是读取abc数据,把这个数据作为个参数给cons建立个实例对象,然后强制转换String类型,然后把这个对象赋值给Str

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 新年快乐!

查看全部评分

回复 使用道具 举报
那些人之一 发表于 2014-2-7 07:35
关键是这个cons,这个你什么个什么类型对象,是发射获得的,还是其他对象什么。这里是读取abc数据,把这个 ...

你也新年快乐啊,现在在黑马云8期了?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马