黑马程序员技术交流社区

标题: 请教大家高新技术里面讲构造方法反射里面的一个问题 [打印本页]

作者: 沙漠里的小鱼    时间: 2012-2-18 03:01
标题: 请教大家高新技术里面讲构造方法反射里面的一个问题
本帖最后由 沙漠里的小鱼 于 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”);不可以吗  谁讲讲啊
作者: 丁晓宇    时间: 2012-2-18 03:15
本帖最后由 丁晓宇 于 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对象 。。 我想说道这里你应该已经明白了 ,不明白的话 建议看一下什么是方法重载
作者: 蒙武辉    时间: 2012-2-18 03:39
 String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。之所要 new StringBuffer(“abc”),我认为跟上面的Constructor constructor1=String.class.getConstructor(StingBuffer.class)有关系。


作者: 黄锦成    时间: 2012-2-18 09:55
第一句是获取参数类型为StringBuffer的那个构造函数,第二句是使用这个构造函数
作者: 邱纲    时间: 2012-2-18 10:15
构造函数的参数类型需要是一个StringBuffer类型的,利用反射技术得到的这个构造函数,那么你就需要向这个构造函数传递一个StringBuffer类型的参数,虽然说StringBuffer和String都是操作字符串类型的类,但是它们不属于一个类,有共同点,也有不同点(StringBuffer可以操作可变字符串,String不可以),类型不同,所以不能向里面传入一个String类型的参数
作者: 花开~的季节    时间: 2012-2-18 11:18
因为你第一个构造函数是stringbuffer你当然要new 一个stringbuffer对象传值,java构造函数那一块你没有理解透,希望多把基础打扎实
作者: 沙漠里的小鱼    时间: 2012-2-18 20:50
丁晓宇 发表于 2012-2-18 03:15
别着急 我来回答 先占位 我正在编辑哦
-------------------------------------------------
Constructor co ...

讲的非常好 可是我还是不明白
作者: 沙漠里的小鱼    时间: 2012-2-19 17:51
花开~的季节 发表于 2012-2-18 11:18
因为你第一个构造函数是stringbuffer你当然要new 一个stringbuffer对象传值,java构造函数那一块你没有理解 ...

你能给我讲讲前面为什么要加new StringBuffer  
作者: 【专】【属】    时间: 2012-2-19 18:34
因为我们通过反射所得到的构造方法中的参数列表中用到的是一个StringBuffer对象,所以要传递一个StringBuffer的对象了。




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