this在java中表示出以下三个概念:
1、调用类中的属性或方法
类中各个方法的参数列表中常见和属性同名的参数,如用于封装的方法setName(String name),这时用this.name表示类的属性,以区分形参和属性。
比较Person1和Person2,同样的类,区别只在构造方法的参数,Person1传递的参数是n和a,不够直观,Person2直接用name和age作为形参,和类的属性重名,十分直观。若在构造方法中直接写name=name;age=age,等号左边表示的是形参,并非类中的属性,会导致实例化的时候name和age属性为空,所以用this.name表示类中的属性,this.age同理。
class Person1{
private String name;
private int age;
public Person1(String n,int a){
name=n;
age=a;
}
……
}
class Person2{
private String name;
private int age;
public Person2(String name,int age){
this.name=name;
this.age=age;
}
……
}
2、调用类中的构造方法
一段好的程序应该尽可能的消除代码的重复,落实到一个类的构造上,若该类中有多个构造函数,并且各个构造函数之间有包含关系的话,通过this()调用代替代码的重复。下面两个类是等价的,Person2的写法更符合规范。
class Person1{
private String name;
private int age;
public Person1(){
system.out.println("对象已经创建");
}
public Person1(String name){
system.out.println("对象已经创建");
this.name=name;
}
public Person1(String name,int age){
system.out.println("对象已经创建");
this.name=name;
this.age=age;
}
}
class Person2{
private String name;
private int age;
public Person2(){
system.out.println("对象已经创建");
}
public Person2(String name){
this();
this.name=name;
}
public Person2(String name,int age){
this(name);
this.age=age;
}
}
执行构造方法必须放在对对象的所有操作之前,所以用this调用构造方法必须放在所有代码之前。各个构造方法不能递归调用形成死循环,所以一定有一个构造方法不是使用this()调用的,作为出口,这个构造方法一般是无参构造方法。3、表示当前对象
class Person{
public void print(){
system.out.println(this);
}
}
public class Demo1{
public static void main(String args[]){
Person p1 = new Person();
system.out.println(p1);
p1.print();
}
}
代码的执行结果是将Person在内存中的存储位置打印两遍。
本文的思想来自魔乐科技关于java的一系列课程,非常详细,建议初学者看一看。
本文详细解析了Java中this关键字的三大应用场景:调用类中的属性或方法、调用类中的构造方法及表示当前对象。并通过示例代码对比了不同使用方式的效果。
6万+

被折叠的 条评论
为什么被折叠?



