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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张先龙 中级黑马   /  2013-4-12 11:28  /  1262 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

张孝祥老师的基础加强的19集里面的一个例子:
import java.lang.reflect.Constructor;
public class ConTest {
        public static void main(String[] args) throws Exception {
                Constructor<String> con=String.class.getConstructor(StringBuffer.class);
                String str=(String)con.newInstance(new StringBuffer("abc"));
                System.out.println(str);       
        }
}
和我自己写的一个程序
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
class PrintClass{
        private String s;
        public PrintClass(String s){
                this.s=s;
        }
        public void print(){
                System.out.println(s);
        }
}
public class Test5 {
        public static void main(String[] args) throws Exception{
        Class clazz=PrintClass.class;//获得字节码对象
        Constructorconstructor=clazz.getConstructor(String.class);
PrintClassprintclass=
(PrintClass)constructor.newInstance("abc");}}
这两个程序都能运行成功
这两个程序调用newInstance()的方法:
第一个程序中用构造函数创建实例:
String str=(String)con.newInstance(new StringBuffer("abc"));
第二个程序中用构造函数创建实例:
PrintClass printclass=(PrintClass)constructor.newInstance("abc");

我试过,第一个程序用第二种方式出错,第二个用第一种方式也是出错,但是两个类几乎是一样的啊?我的疑问就是红色的那部分代码为什么不一样呢?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
public String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,除非需要 original 的显式副本

API 是上述定义的,除非需要original 显示副本,否则,就没有用到该构造方法String s = new String(“abc”);只是适用于普通的方法
要获取该字符串的构造方法 ,就必须有original 显示的副本
因为String的组成单位是char 你可以通过 char[] 数组将字符串传入,或者通过StringBuffer ,这只是演示获取该Constructor 的,有就可以获取,但是你得最好查一下API 看看有什么限定条件,就是这么定义的,为什么呢?

援引张老师的一句话,你不要问为什么,等你搞懂了,哪还有时间做更多有意思的事情?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
杨玉辉 发表于 2013-4-12 11:55
public String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换 ...

关于我的问题,你的回答帮助蛮大的 ,,对这个问题来说,不搞懂下次还是over啊 我自己写的第二个就是看了老张的视频编的 结果把自己折腾得够呛
回复 使用道具 举报

如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马