目录
一、this访问成员变量
java
class Date{
public int year;
public int month;
public int day;
public Date(int year, int month, int day){
year = year;
month = month;
day = day;
}
public void Show(){
System.out.println(year+"/"+month+"/"+day+"/");
}
}
public class useThis {
public static void main(String[] args) {
Date date = new Date(2007, 3, 23);
date.Show();
}
}
对于这种情况其输出的结果为:
java
C:\javadev\JDK17\bin\java.exe "-javaagent:D:\idea\IntelliJ...
D:\Code\if-yejava\useThis\out\production\useThis useThis
0/0/0/
进程已结束,退出代码为 0
而出现这种结果的原因是因为在上面的构造方法中,是形参自己给自己赋值,并没有给成员变量成功赋值,所以导致最后输出的结果是0
解决方法:
java
public Date(int year, int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
在成员方法(实例方法)内部 :
this表示"当前对象",可以访问成员变量和其他成员方法。在静态方法中 :不能使用
this,因为静态方法属于类,没有当前实例。(静态方法中没有this)
二、this访问成员方法
- this访问成员方法只能在成员方法中进行调用。
java
public void Show(){
this.Test(1949, 10, 1);
System.out.println(this.year+"/"+this.month+"/"+this.day+"/");
}
public void Test(int year,int month,int day){
System.out.println(year+"/"+month+"/"+day);
}
}
java
C:\javadev\JDK17\bin\java.exe "-javaagent:D:\idea\IntelliJ...
D:\Code\if-yejava\useThis\out\production\useThis useThis
1949/10/1
2007/3/23/
进程已结束,退出代码为 0
当this来访问成员方法时,可以在其他非静态成员中来使用this来调用,也可以在构造方法中使用this中调用
三、this访问构造方法
java
public Date(){
this(2007, 3, 23);
}
public Date(int year, int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
- this访问构造方法时只能在本类的一个构造方法中调用另一个构造方法,且必须位于构造方法发中的第一行,
java
public Date(){
this(2007, 3, 23);
System.out.println();
this(2007, 3, 23);
}
- 使用this来访问构造方法,必须在该类中的构造方法来调用。
- 并且还必须位于构造方法中的第一行(否则会发生编译错误)
四、总结
本文围绕 Java 中的 this 关键字,从三个使用场景做了梳理,核心要点可以归纳如下:
- this 访问成员变量 :当构造方法或方法的形参与成员变量同名时,直接写
year = year只是形参给自己赋值,成员变量仍然是默认值 0。加上this.前缀后,this.year明确指向当前对象的成员变量,赋值才会真正生效。 - this 访问成员方法 :
this表示"当前对象",可以在非静态成员方法中通过this.方法名()调用本类的其他成员方法,也可以在构造方法中调用。 - this 访问构造方法 :使用
this(参数列表)可以在本类的一个构造方法中调用另一个构造方法,实现构造逻辑复用;但该语句必须位于构造方法的第一行,否则会编译报错。 - 使用限制 :
this只能在非静态的成员方法和构造方法中使用,静态方法属于类本身、没有当前实例,因此静态方法中不能使用this。
一句话记忆:
this就是"当前对象的引用",用来区分同名的成员变量与局部变量、调用本类的成员方法,以及在构造方法之间互相调用。