this关键字只能在方法内部使用
this关键字一共有四种用法:分别是调用成员变量、调用成员方法、调用其他重载的构造方法、表示当前对象;下面来介绍这四种用法
1、this调用成员变量
使用this调用成员变量发生在方法内部,当成员变量(类下声明的变量)和局部变量(方法内声明的变量)的名字相同时,使用this.变量名来表示该变量代表的是成员变量。
//声明成员变量
private String name;
//参数中的变量是方法中的局部变量
public void setName(String name){
//this.name表示的就是成员变量,name表示局部变量
this.name = name;
}
上述代码中,传入方法的参数是方法中的局部变量,this.name表示的就是成员变量。
2、this调用成员方法
使用this调用成员方法同样发生在方法内部,通常情况下,在方法内部调用其他方法时,使用的方法是直接调用,即直接写方法名。其实,此时在被调用的方法名前面使用this关键字加上"."调用,这两种调用成员方法的效果是一样的,由于使用第二种方式没有太大的意义,因此一般使用直接调用的方式。
public class ThisTest{
public void method1(){
System.out.println("成员方法");
}
public void method2(){
//以下两种调用方法的方式效果一致
method1();
this.method1();
}
}
上述代码中,method1();和this.method1();的调用方式是一致的。
3、this调用其他重载的构造方法
使用this关键字调用其他重载的构造方法是this关键字非常重要的用法之一,采用this调用其他构造方法需要将this语句写在构造方法内的第一行,否则会报错。这种调用方式的优点在于一个构造方法不必重复编写其他构造方法中已有的代码,而是通过调用其他构造方法实现代码的复用,从而提供良好的类代码结构。
public class ThisTest {
//定义两个成员变量
private String name;
private int height;
//无参构造方法
public ThisTest() {
//使用this调用参数为String类型的构造器
this("Ben");
}
//参数为String类型的构造方法
public ThisTest(String name) {
//使用this调用参数为String和int类型的构造器
this(name, 165);
}
//参数为String和int类型的构造方法
public ThisTest(String name, int height) {
//为两个属性赋值
this.name = name;
this.height = height;
System.out.println(name+","+height);
}
public static void main(String[] args) {
new ThisTest();
}
}
输出结果为Ben,165。
创建对象时,构造方法就会被调用,现在来看一下构造方法的调用顺序:
首先,创建对象时没有传递参数,所以先调用无参构造方法,进入无参构造方法后,执行this(“Ben”),进入参数类型为String的有参构造方法,此时将Ben传值给“name”,执行this(name,165),进入参数类型为String和int的有参构造方法,最终“name”的值为Ben,“height”的值为165。
4、this表示当前对象
public class This2Test {
//定义一个属性
public String name;
//参数为String类型的构造方法
public This2Test(String name) {
this.name = name;
}
//定义一个参数为引用类型的方法
public void method3(This2Test tt) {
//输出该对象的属性
System.out.println(tt.name);
}
public void method4() {
//调用方法并传入this
method3(this);
}
public static void main(String[] args) {
//创建对象t
This2Test t = new This2Test("贝克");
//对象t调用方法
t.method4();
}
}
输出结果为:贝克
在main方法中先创建对象t,此时进入参数为String类型的构造方法,此时name为传入的贝克,也就是说当前创建的对象t的name是贝克。然后,用对象t去调用method4()方法,该方法内部调用了method3()方法,并传入了this,因此,进入method3()方法,打印this的名字,这里的这个this代表的就是调用method4()方法的对象,这里就体现了this的第四种用法,即this表示当前对象,在这里可以简单理解为,this在method4()方法中被调用,这个this指的就是当前调用method4()的对象。