Java中关于this的三种用法

目录

一、this访问成员变量

二、this访问成员方法

三、this访问构造方法

四、总结

一、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 就是"当前对象的引用",用来区分同名的成员变量与局部变量、调用本类的成员方法,以及在构造方法之间互相调用。

相关推荐
山甫aa12 分钟前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
软件技术NINI15 分钟前
基于SpringBoot和Vue的博物馆预约平台管理系统的设计与实现
java·毕业设计·毕设
2601_9687931438 分钟前
Python Requests 轻量自动化:无需浏览器,实现真人级账号浏览模拟
开发语言·python·自动化
eggwyw1 小时前
关于C++为什么不加入垃圾回收机制解析
开发语言·c++
独泪了无痕10 小时前
探索Pinyin4j-Java中的拼音转换利器
java·后端
道尔柯南11 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
来让爷抱一个12 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
kingx312 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
DevOpenClub14 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考