转载:
基础知识
如果要谈this那么首先需要知道在java中一个类的初始化过程,也就是当代码中调用new的时候,底层程序的执行过程:
- 给即将初始化的对象分配存储空间
- 将该类定义中的成员变量初始化为指定的值或者默认值【比如int缺省值为0,double缺省值为0.0】
- 执行构造函数内部逻辑,一般是初始化成员变量具体的值
- 返回对象,此时第一步分配的存储空间就拥有了具体的意义
在以上四个步骤中,都有this的影子,因为在java中,this可以指代的是当前的对象,所以在该对象从产生到回收的生命周期中,都有this陪伴着。
this的定义
this的本质就是“创建好的对象的地址”, 由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象” 。
使用场景
-
在程序中产生二义性之处,应使用this来指明当前对象:
普通方法中,this总是指向调用该方法的对象;
构造方法中,this总是指向正要初始化的对象。
-
使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
-
this不能用于static方法中:
因为static中并不是属于某一个类下的范围,所以this无法确认自己到底是哪一个类的地址【this不知道自己要陪伴哪一个类】,所以此时this就无法使用,在java代码中,static体中使用this会报错
具体实例:
-
this代表当前对象
-
this()调用重载构造方法
-
当参数和成员变量重名时,不使用this时,程序会使用就近原则使用变量