java中一般方法里的this是代表调用本方法的对象,但是构造方法里的this代表的是什么呢。

java中一般方法里的this是代表调用本方法的对象,但是构造方法里的this代表的是什么呢。

this代表你正在构造的对象。

public class Test {
public Test() {
System.out.println(this.toString());
}
public static void main(String[] args) {
Test obj = new Test();
System.out.println(obj.toString());
}
}

输出的两个字符串相同(后面的数字是对象地址),说明this和obj是同一个对象。


这里this就是正在构建的CommunicationDemo的对象,作为参数传给Thread的构造函数。


内幕是:java对象的建立其实是在构造函数开始执行之前,就是说构造函数执行的时候,被构造的对象其实已经存在了,所以构造函数中可以用this引用当前被构造的对象进行处理(比如 this.name=“Jack”)。

追问

哦,收获不小,其实构造方法不是在创建对象,而是在不停的复制对象到不同的地址中去。另外调用构造方法的其实还是这个this。你看我理解的对不。

追答

也不能说是复制,产生新对象并且放在内存里是虚拟机的工作,构造方法的功能其实是初始化这个新对象。
“调用构造方法的其实还是这个this”我觉得这个说法好。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-01
你弄错了this代表的是本类的实例对象,不是什么调用本类的方法的对象.当你用new创建一个对象的时候,对象就已经在内存了.(具体的你的血jvm和反射).构造方法只是为了给对象里的属性赋值.在类里任何地方出现的this都是指的本类的实例对象,构造方法里的也一样
第2个回答  2013-11-01

这个如果想深究,可以了解一下C语言,看一下【 java编程思想】。 平时的使用可不用太计较。


下面是【 java编程思想】里关于一个类的初始化顺序的解释。

在这里有必要总结一下对象的创建过程。请考虑一个名为Dog 的类:
(1) 类型为Dog 的一个对象首次创建时,或者Dog 类的static 方法/static 字段首次访问时,Java 解释器
必须找到Dog.class(在事先设好的类路径里搜索)。
(2) 找到Dog.class 后(它会创建一个Class 对象,这将在后面学到),它的所有static 初始化模块都会运
行。因此,static 初始化仅发生一次——在Class 对象首次载入的时候。
(3) 创建一个new Dog()时,Dog 对象的构建进程首先会在内存堆(Heap)里为一个Dog 对象分配足够多的存
储空间。
(4) 这种存储空间会清为零,将Dog 中的所有基本类型设为它们的默认值(零用于数字,以及boolean 和
char 的等价设定)。
(5) 进行字段定义时发生的所有初始化都会执行。
(6) 执行构建器。

 

看一看出, 到(6)的时候, 这个对象其实已经在内存中存在了。所以this已经有引用了。


对象的创建,就是在内存中申请一段地址空间。和C,C++是相同的。而java中这部分工作,是


JVM完成的。

第3个回答  2013-11-01
构造方法中的this应该代表的是本类,比如这个类有一个属性age,构造方法中可以用this.age=age
来为age赋值。个人理解,说的不好追问

如果这个age不是静态的呢。

追答

什么意思?说具体点

追问

坦白说把,这段代码我理解不了,this到底是代表什么。

追答

我对线程这快不是太了解,刚才看了下api,你这个类继承了Runnable类,而this其实指的就是你这个类,在创建线程的时候有个一构造方法Thread(Runnable target,
String name),你这个程序就是调用的这个方法创建的线程。就是这样子的了

第4个回答  2013-11-01
个人理解是代表你声明的该类的对象追问

关键是构造方法夹在是是没有对象存在的。

追答

没明白你 表达的意思,构造方法不是声明一个类的对象时调用的吗?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网