this关键字必须放在非静态方法里面。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
this的主要用途包含以下几个方面:
1.使用this关键字引用成员变量
2.使用this关键字引用成员方法
3.使用this关键字代表自身类的对象
4.使用this关键字在自身构造方法内部引用其它构造方法
例子:
public class ThisTest {
private int i = 1;
private int j;
ThisTest thisTest;
// 第一个构造器(只有一个int类型的形参)
ThisTest(int i) {
j = 1;
// 此时this.i调用的是成员变量,i是函数参数
System.out.println("这是第" + j + "个构造器中this.i的值:" + this.i);
System.out.println("这是第" + j + "个构造器中参数i的值:" + i);
}
// 第二个构造器(只有一个String类型的形参)
ThisTest(String name) {
j = 2;
System.out.println("这是第" + j + "个构造器中的参数name的值:" + name);
}
// 第三个构造器(有一个int类型和一个String类型的形参)
ThisTest(int i, String name) {
// 调用第二个构造器,会重新输出一遍
this(name);
//调用成员方法
this.talk(name);
System.out.println("this(name)调用的是第" + j + "个构造器的方法,参数为:" + name);
}
// 返回当前的对象
public ThisTest show() {
return this;
}
//成员方法
public String talk(String name) {
System.out.println("我是成员方法!");
return name;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ThisTest test1 = new ThisTest(2);
ThisTest test2 = new ThisTest("张三");
ThisTest test3 = new ThisTest(2, "李四");
System.out.println("当前对象的i的值为:" + test1.show().i);
}
}
输出的结果:
这是第1个构造器中this.i的值:1
这是第1个构造器中参数i的值:2
这是第2个构造器中的参数name的值:张三
这是第2个构造器中的参数name的值:李四
我是成员方法!
this(name)调用的是第2个构造器的方法,参数为:李四
当前对象的i的值为:1
从结果中可以看到,在第一个构造器中this.i调用的是成员变量,而i则是构造器中的形参。从构造器3中可以看出this可以在自身构造方法内部引用其它构造方法以及调用成员方法,最后的输出表明可以使用this关键字代表自身类的对象