主要有以下三个方面的用途:
1.this调用本类属性
2.this调用本类方法
3.this表示当前对象
接下来我们一一详解:
this调用本类属性
其实在前面的博客中有用到,但是没有详细解释
我们看代码吧:
class Person{
private String name;
private int age;
public Person(String name,int age){
name = name ;
age = age ;
}
public String getPersonInfo(){
return "姓名:" + name + ",年龄:"+age;
}
}
public class Test{
public static void main(String[] args) {
Person per = new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}
在上面的构造方法中如下:
public Person(String name,int age){
name = name ;
age = age ;
}
可以看到方法里面name=name;age=age;name这些名字都一样,到底哪个代表哪个?编译系统能否识别呢?我们看看结果就知道了:
可见并不是我们想要的结果,我们想要的结果是姓名为张三,年龄是20
这时候我们就需要用this来调用属性了,将构造方法改成如下方式:
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
再来看看结果是不是我们想要的:
所以以后只要在类中的方法中使用类中属性,一定记得加this。
this调用本类方法
this调用本类方法有两种情况:
1.调用普通方法 。this.方法名(参数)
2.调用构造方法。 this(参数)
this调用普通方法
比如说我们在上面的代码中改一下:
public Person(String name,int age){
this.name = name ;
this.age = age ;
this.print();//调用普通方法
}
public void print(){
System.out.println("*****************");
}
我们可以看到this.print()就调用了普通方法,我们再看看运行结果:
调用成功!
这就是this调用本类方法,其实调用本类方法不加this也可以,但是最好加上,因为在后面的继承中有很大的作用,能更好的区分。
this调用构造方法
在上篇博客中我详细介绍了构造方法的重载,我们先把代码搬过来看一下:
public Person(String name){//构造方法
this.name=name;
}
public Person(String name,int age){//重载构造方法
this.name = name ;
this.age = age ;
}
那么调用构造方法就可以把代码修改如下:
public Person(String name){//构造方法
this.name=name;
}
public Person(String name,int age){//重载构造方法
this(name);//调用构造方法
this.age = age ;
}
使用this调用构造方法时要注意:
1.this调用构造方法语句必须放在构造方法首行。
2.this调用构造方法必须留有出口
this表示当前对象
还是看一段代码吧:
class Person{
public void print(){
System.out.println("[PRINT]方法:"+this);//this表示当前对象
}
}
public class Test{
public static void main(String[] args) {
Person p1 = new Person();
System.out.println("[MAIN]方法:"+p1);
p1.print();
System.out.println("=================");
Person p2 = new Person();
System.out.println("[MAIN]方法:"+p2);
p2.print();
}
}
我们在调用print()前后各打印一次结果:
只要对象调用了本类中的方法,这个this就表示当前执行的对象