关于java的this关键字

老师布置的作业:编写两个重载构造器的类,并在第一个构造器中使用this调用第二个构造器。
public class ThisConstructorCall {
public ThisConstructorCall(String s) {
System.out.println("s = " + s);
}
public ThisConstructorCall(int i) {
this("i = " + i);
}
public static void main(String args[]) {
new ThisConstructorCall("String call");
new ThisConstructorCall(47);
}
}
显示的结果为
s = String call
s = i = 47
请问为什么第二个构造器的输出会显示"s=i=47",这里的this是如何实现的,最好哪位大大能够讲解一下本题内存中是如何实现的。

当在同一个类中想要用构造器调用构造器时用的是this这个关键字,而且必须写在构造器的首行.和方法调用差不多,当你见到this时,说明你要调用另外一个符合标准的构造器了.new ThisConstructorCall("String call")调用构造器完成事例化和初始化,在JVM的堆区中开辟了一个空间,里面放的是ThisConstructorCall 类型的对象.
new ThisConstructorCall(47)这句调用的是
public ThisConstructorCall(int i)这个构造器,进入构造器内部执行里面的内容,当遇到this("i = " + i); 语句时,又调用了
ThisConstructorCall(String s)这个构造器,把"i=47"作为一个字符窜传给了s,所以最后的输出结果就是s=i=47.
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-04-19
首先讲下为什么显示s=i=47
你第二个构造器中调用this("i=" + i);
通过this调用第一个构造器,那么("i="+i)这里面就传入了第一个构造器的s,因此输出以上结果,你理解成:s = ("i="+i),这里面第二个i是一个int型,从第二个构造器得到

内存的实现:
通过new后,你第一个构造器就进入了heap中,然后输出结果
第二个构造器再进入heap中,通过this,实现了调用自己的构造器,这个构造器也在heap中。

this可以看作是一个变量,它的值是当前对象的引用。
第2个回答  2008-04-19
this代表的是当前对象 这点很重要 本类有两个重载的构造方法 当调用第一个构造函数的时候 执行的很容易理解 是直接打印 当调用第二个构造方法时 方法体里又调用了第一个构造函数 this代表当前对象 如果是父类的话 则使用super("xxx");
第3个回答  2008-04-19
是根据对象类型的一个方法重载,第一个类型是数组类型,第二个是整型,根据用户输入的类型不同 调用不同的方法
相似回答
大家正在搜