javaSE中this关键字

主要有以下三个方面的用途:

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就表示当前执行的对象

猜你喜欢

转载自blog.csdn.net/qq_40550018/article/details/84197094