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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 沙漠里的小鱼 于 2012-2-18 03:11 编辑

Constructor constructor1=String.class.getConstructor(StingBuffer.class)
String str2 = (String)constructor1.newInstance(new StringBuffer(“abc”));
其中第一行StingBuffer.class是得到参数是StingBuffer类型的构造方法的意思 那第二行为什么要用new StringBuffer(“abc”) 不是很理解啊  (“abc”) 前面为什么要加new StringBuffer  直接把第二行写成String str2 = (String)constructor1.newInstance(“abc”);不可以吗  谁讲讲啊

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 丁晓宇 于 2012-2-18 03:30 编辑

别着急 我来回答 先占位 我正在编辑哦
-------------------------------------------------
Constructor constructor1=String.class.getConstructor(StingBuffer.class)
String str2 = (String)constructor1.newInstance(new StringBuffer(“abc”));
1、其中第一行StingBuffer.class是得到参数是StingBuffer类型的构造方法的意思?
每个方法都有参数列表(当然参数列表可以为空),构造方法也是方法,它也有参数列表,既然有参数就要有参数的类型。
我在下面举个例你看一下
public class User(){
private int id;
private String name;
private String password;
...省略getter & setter
public User(){// 省略构造方法内部代码}
public User(String name){//同上}
public User(int id){//同上}
}

如果我要获取User类其中的一个构造方法
那我想获取public User(String name){//同上}这个构造方法怎么办??
答:Constructor c1 = User.class.getConstructor(String.class);,因为一个类也许会有很多构造方法但是他们的参数列表一定不相同,你必须用方法的参数列表来区分。

2、那第二行为什么要用new StringBuffer(“abc”) 不是很理解啊  (“abc”) 前面为什么要加new StringBuffer  ? new StringBuffer("abc") 这是创建了一个StringBuffer对象
StringBuffer sb = new StringBuffer("abc") ;  这句话是调用StringBuffer中的Public StringBuffer(String str){} 这个构造方法,每个类的构造方法的返回值一定是他本身的一个实例对象(虽然构造方法是没有返回值的=,=我这样说只是为了好理解)

3、直接把第二行写成String str2 = (String)constructor1.newInstance(“abc”);不可以吗  谁讲讲啊
"abc" 这是一个 String 对象, 而你这个构造需要的是StringBuffer对象 。。 我想说道这里你应该已经明白了 ,不明白的话 建议看一下什么是方法重载

评分

参与人数 2技术分 +2 黑马币 +10 收起 理由
沙漠里的小鱼 + 10 讲的非常好 可是我还是没明白
admin + 2 成功占到第一位!

查看全部评分

回复 使用道具 举报
 String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。之所要 new StringBuffer(“abc”),我认为跟上面的Constructor constructor1=String.class.getConstructor(StingBuffer.class)有关系。

点评

好刻苦,这么晚还在学习  发表于 2012-2-18 03:42

评分

参与人数 1技术分 +1 收起 理由
admin + 1 很刻苦,但是也得注意身体!

查看全部评分

回复 使用道具 举报
第一句是获取参数类型为StringBuffer的那个构造函数,第二句是使用这个构造函数
回复 使用道具 举报
构造函数的参数类型需要是一个StringBuffer类型的,利用反射技术得到的这个构造函数,那么你就需要向这个构造函数传递一个StringBuffer类型的参数,虽然说StringBuffer和String都是操作字符串类型的类,但是它们不属于一个类,有共同点,也有不同点(StringBuffer可以操作可变字符串,String不可以),类型不同,所以不能向里面传入一个String类型的参数

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
因为你第一个构造函数是stringbuffer你当然要new 一个stringbuffer对象传值,java构造函数那一块你没有理解透,希望多把基础打扎实
回复 使用道具 举报
丁晓宇 发表于 2012-2-18 03:15
别着急 我来回答 先占位 我正在编辑哦
-------------------------------------------------
Constructor co ...

讲的非常好 可是我还是不明白
回复 使用道具 举报
花开~的季节 发表于 2012-2-18 11:18
因为你第一个构造函数是stringbuffer你当然要new 一个stringbuffer对象传值,java构造函数那一块你没有理解 ...

你能给我讲讲前面为什么要加new StringBuffer  
回复 使用道具 举报
因为我们通过反射所得到的构造方法中的参数列表中用到的是一个StringBuffer对象,所以要传递一个StringBuffer的对象了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马