this关键字主要有三个作用
1.调用本类中的属性。
1 public class TextThis { 2 public static void main(String[] args){ 3 Person p1 = new Person(); 4 p1.getInfo(); 5 } 6 } 7 8 class Person{ 9 String name; 10 int age; 11 public Person(String n, int a){ 12 name = n; 13 age = a; 14 } 15 public String getInfo(){ 16 System.out.println(); 17 return null; 18 } 19 }
上述程序可以正常运行,但是构造方法中形参名称对于我们来说不便于识别,那我们可不可以这样呢?
1 public class TextThis { 2 public static void main(String[] args){ 3 Person p1 = new Person(); 4 p1.getInfo(); 5 } 6 } 7 8 class Person{ 9 String name; 10 int age; 11 public Person(String name, int age){ //将形参名称和类中属性名称一致,这样可以便于我们识别。 12 name = name; //但是这个程序可以正常运行吗?显然是不能的,这个里的 13 age = age; //name = name 都是形参变量本身,相当于自己给自己赋值 14 } //这是不行的。 15 public String getInfo(){ 16 System.out.println(); 17 return null; 18 } 19 }
这时我们就以用this关键字来实现在构造方法中调用类的属性。
1 public class TextThis { 2 public static void main(String[] args){ 3 Person p1 = new Person(); 4 p1.getInfo(); 5 } 6 } 7 8 class Person{ 9 String name; 10 int age; 11 public Person(String name, int age){ 12 this.name = name; //name起来么加了this就代表这个属性是类中的属性,后面的name是形参。 13 this.age = age; //这样就没有问题了 14 } 15 public String getInfo(){ 16 System.out.println(); 17 return null; 18 } 19 }
2.调用构造方法。
例如
1 public class TextThis { 2 public static void main(String[] args){ 3 Person p1 = new Person("hcf", 21); 4 p1.getInfo(); 5 } 6 } 7 8 class Person{ 9 String name; 10 int age; 11 public Person(){ 12 System.out.println("调用了无参的构造方法Person()"); //无参的构造方法被调用就会打印出此语句。 13 } 14 public Person(String name, int age){ 15 this(); //通过this()调用无参的构造方法。 16 this.name = name; //此代码运行完我们会发现,打印出了“调用了无参的构造方法...” 17 this.age = age; /说明我们实现了通过this()调用了构造方法。 18 } 19 public String getInfo(){ 20 System.out.println(name +"\n" + age); 21 return null; 22 } 23 }
3.代表当前对象
1 public class TextThis { 2 public static void main(String[] args){ 3 Person p1 = new Person(); 4 Person p2 = new Person(); 5 System.out.println(p1); //打印p1的地址 6 p1.getInfo(); //调用p1中的getInfo()方法,打印当前this的地址 7 System.out.println(p2); //打印p2的地址 8 p2.getInfo(); //调用p2中的getInfo()方法,打印当前this的地址。 9 10 11 } 12 } 13 14 class Person{ 15 public String getInfo(){ 16 System.out.println(this); //this代表当前对象,例如调用p1.getInfo()方法,此时打印的this就是p1 17 return null; //同理,调用p2.getInfo()方法,打印的this就是p2. 18 } //所以该代码运行后,p1和p1.getInfo();输出的结果是相同的, 19 } //p2和P2.getInfo()方法输出的结果也是相同的。
原文:https://www.cnblogs.com/huang-changfan/p/9313391.html