this关键字可以做三件事情:
- 调用本类属性
- 调用本类方法(普通、构造)
- 表示当前对象
使用this表示本类属性
范例: 简单例子
class Person {
private String name;
private int age;
public Person(String n, int a) {
name = n;
age = a;
}
public String getInfo() {
return "姓名:" + name + ", 年龄:" + age;
}
}
public class StringDemo {
public static void main(String args[]) {
System.out.println(new Person("占三", 11).getInfo());
}
}
当前类中的构造的核心目的在于:为类中的name和age的两个属性进行初始化,但是现在构造方法的参数声明不准确,所以最好的做法是将参数的名称与属性统一起来,那么这个时候就可能产生参数与属性同名的问题,所以为了明确的标记出要使用的属性还是方法的参数,那么属性前都加上this的形式。
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getInfo() {
return "姓名:" + this.name + ", 年龄:" + this.age;
}
}
public class StringDemo {
public static void main(String args[]) {
System.out.println(new Person("占三", 11).getInfo());
}
}
只要在类的方法中访问类的属性,那么属性前一定要加this关键字的形式。
使用this调用本类方法
类中的方法一共有两种:
- 普通方法:
this.方法名称(参数…); - 构造方法:
this(参数…);
虽然调用本类方法可以不用this,但是建议加上,这样的目的可以区分方法的定义来源。
范例: 调用构造
构造方法与普通方法最大的区别在于:使用关键字new实例化新对象的时候使用一次,而普通方法是在对象实例化完成后(构造方法已经执行)可以调用多次。
在Java里面支持类构造方法的互相调用。
范例: 构造方法本身存在的问题
class Person {
private String name;
private int age;
//不管调用哪个构造方法,都要执行一段信息输出
public Person() {
System.out.println("***** 一个新Person类产生了 *****");
}
public Person(String name) {
System.out.println("***** 一个新Person类产生了 *****");
this.name = name;
}
public Person(String name, int age) {
System.out.println("***** 一个新Person类产生了 *****");
this.name = name;
this.age = age;
}
public String getInfo() {
return "姓名:" + this.name + ", 年龄:" + this.age;
}
}
public class StringDemo {
public static void main(String args[]) {
System.out.println(new Person().getInfo());
System.out.println(new Person("占三").getInfo());
System.out.println(new Person("占三", 11).getInfo());
}
}
现程序中的出现有重复的代码,所以这些不应该出现,必须消除掉重复的代码。
范例: 使用this解决问题
class Person {
private String name;
private int age;
//不管调用哪个构造方法,都要执行一段信息输出
public Person() {
System.out.println("***** 一个新Person类产生了 *****");
}
public Person(String name) {
this(); //调用无参构造
this.name = name;
}
public Person(String name, int age) {
this(name);
this.age = age;
}
public String getInfo() {
return "姓名:" + this.name + ", 年龄:" + this.age;
}
}
public class StringDemo {
public static void main(String args[]) {
System.out.println(new Person().getInfo());
System.out.println(new Person("占三").getInfo());
System.out.println(new Person("占三", 11).getInfo());
}
}
虽然使用this可以实现构造方法的互相调用,但是有几点要求:
this()调用构造方法的语句必须放在构造的首行;- 使用
this调用构造方法的时候必须留有出口。
this表示当前对象
在一个类之中肯定会产生若干个对象,那么程序类在分辨的时候不会记住有多少个对象产生,它唯一可以知道的是当前可以操作本类的对象是哪一个。
范例: 观察例子
class Person {
public void fun() {
System.out.println("【fun方法】" + this);
}
}
public class StringDemo {
public static void main(String args[]) {
Person p1 = new Person();
System.out.println("【Main方法】" + p1);
p1.fun(); //有p1这个对象调用fun()方法
System.out.println("========");
Person p2 = new Person();
System.out.println("【Main方法】" + p2);
p2.fun(); //有p2这个对象调用fun()方法
}
}
在整体的操作过程之中,this定义没有变,只要有某一个对象调用了本类的方法,那么这个this就表示当前执行的对象。
本文详细解析了Java中this关键字的三大用途:调用本类属性、调用本类方法(包括构造方法)以及表示当前对象。通过实例展示了如何解决构造方法中重复代码的问题,并解释了this在区分方法来源和提高代码可读性方面的作用。
1万+

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



