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”我觉得这个说法好。
这个如果想深究,可以了解一下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完成的。
来为age赋值。个人理解,说的不好追问
如果这个age不是静态的呢。
追答什么意思?说具体点
追问坦白说把,这段代码我理解不了,this到底是代表什么。
我对线程这快不是太了解,刚才看了下api,你这个类继承了Runnable类,而this其实指的就是你这个类,在创建线程的时候有个一构造方法Thread(Runnable target,
String name),你这个程序就是调用的这个方法创建的线程。就是这样子的了
关键是构造方法夹在是是没有对象存在的。
追答没明白你 表达的意思,构造方法不是声明一个类的对象时调用的吗?