用代码示例解释Java中的this关键字的用法

简介: 本文通过代码示例详解Java中`this`关键字的五大用法:区分成员与局部变量、调用本类构造方法和方法、实现链式调用、作为参数传递。`this`指向当前对象,提升代码可读性与复用性。

下面通过代码示例详细解释 Java 中 this 关键字的常见用法:

public class ThisKeywordExamples {
   
    // 实例变量
    private String name;
    private int age;
    private double salary;

    // 1. 区分实例变量和局部变量(构造方法中)
    public ThisKeywordExamples(String name, int age) {
   
        // this.name 表示实例变量,name 表示构造方法的参数(局部变量)
        this.name = name;
        this.age = age;
    }

    // 2. 区分实例变量和局部变量(普通方法中)
    public void setSalary(double salary) {
   
        // this.salary 表示实例变量,salary 表示方法参数
        this.salary = salary;
    }

    // 3. 调用当前类的其他构造方法(必须位于构造方法的第一行)
    public ThisKeywordExamples(String name, int age, double salary) {
   
        // 调用上面的双参数构造方法
        this(name, age);
        this.salary = salary;
    }

    // 4. 调用当前类的其他方法
    public void printFullInfo() {
   
        System.out.println("完整信息:");
        // 调用当前类的 printBasicInfo() 方法
        this.printBasicInfo();
        System.out.println("薪资:" + this.salary);
    }

    public void printBasicInfo() {
   
        System.out.println("姓名:" + this.name + ",年龄:" + this.age);
    }

    // 5. 作为方法的返回值(返回当前对象)
    public ThisKeywordExamples updateAge(int newAge) {
   
        this.age = newAge;
        // 返回当前对象的引用,可实现方法链式调用
        return this;
    }

    // 6. 作为参数传递给其他方法
    public void sendToDatabase() {
   
        // 将当前对象作为参数传递给其他方法
        DatabaseUtil.save(this);
    }

    public static void main(String[] args) {
   
        // 测试构造方法中的 this 用法
        ThisKeywordExamples person = new ThisKeywordExamples("张三", 25);
        person.setSalary(8000.0);

        // 测试调用当前类方法的 this 用法
        person.printFullInfo();

        // 测试作为返回值的 this 用法(链式调用)
        person.updateAge(26).printBasicInfo();

        // 测试作为参数的 this 用法
        person.sendToDatabase();
    }
}

// 辅助类:演示 this 作为参数传递
class DatabaseUtil {
   
    // 接收一个对象参数并保存
    public static void save(ThisKeywordExamples obj) {
   
        System.out.println("保存对象到数据库:" + obj);
    }
}

this 关键字的主要用法说明:

  1. 区分实例变量和局部变量
    当方法参数或局部变量与类的实例变量同名时,使用 this.变量名 表示实例变量,避免命名冲突。
    例如在构造方法和 setSalary 方法中,this.name 明确指向类的实例变量。

  2. 调用当前类的其他构造方法
    通过 this(参数列表) 可以在一个构造方法中调用另一个构造方法,减少代码重复。
    注意:这种调用必须放在构造方法的第一行。

  3. 调用当前类的其他方法
    使用 this.方法名() 可以调用当前类的其他方法,增强代码可读性(即使省略 this 也能正常工作,但显式写出更清晰)。

  4. 作为方法返回值
    在方法中返回 this 可以返回当前对象的引用,从而实现方法的链式调用(如示例中的 updateAge(26).printBasicInfo())。

  5. 作为参数传递
    this 可以代表当前对象,作为参数传递给其他方法(如示例中传递给 DatabaseUtil.save() 方法)。

通过这些用法,this 关键字使得代码更加清晰,同时提供了灵活的对象操作方式。

相关文章
|
1月前
|
JSON 数据格式 Windows
Qoder bug,我非常需要这个功能,不然无法做到强模型主导审核分工审计,性价比模型执行落地
Qwen3.8-Max 会话中,即使调用 Agent 时指定 input.model="qfmodel",子 agent 仍沿用主模型 UUID;而 CLI 启动时加 --model qfmodel 才真正生效(CLI 1.1.47,Windows)。
219 0
|
9月前
|
人工智能 算法 网络协议
2026大预测:人人都是“AI Agent指挥官”的时代真的来了
2026年,AI迈入“智能体时代”:AI Agent具备感知、决策、执行与反思能力,成为人类的“数字化分身”。普通人化身“AI指挥官”,依托动作预测、MCP/A2A协议、长程记忆三大基石,跨平台调度Agent军团完成复杂任务。人机关系升维为“战略指挥”,核心价值转向拆解力、审美判断与伦理风控。(239字)
841 4
|
9月前
|
算法 C++
PPO vs DPO:不是谁淘汰谁,而是你用错了位置
PPO与DPO并非替代关系,而是解决不同问题的工具:PPO适合行为对齐与动态探索,DPO擅长偏好学习与精细优化。选择应基于业务阶段,而非盲目跟风。
|
网络虚拟化 网络架构 智能硬件
动态IP/静态IP
动态IP和静态IP简介:动态IP由ISP通过DHCP自动分配,不固定且无需手动设置,具有较高安全性和成本优势,但不适合对外服务;静态IP地址固定不变,适合需要长期稳定连接的设备,便于远程访问和管理,但安全性较低、成本较高且可能造成资源浪费。两者分别适用于不同场景,如临时设备使用动态IP,服务器及企业网络设备使用静态IP。
2330 13
|
10月前
|
搜索推荐 数据处理 UED
1688新品上架没流量?这套“打标爬升”法则,让你的产品快速被看见的实用指南!
本文详解1688新品运营策略,通过“新品标签快速形成”与“四阶段数据爬升”,助力店铺实现新品快速曝光与转化。涵盖精准选品、老客破零、四阶段执行计划及成长积分规则,全面提升新品竞争力。
|
10月前
|
边缘计算 监控 网络协议
网络延迟优化方案
本文系统阐述网络延迟优化全方案,涵盖架构设计、协议调优、全球加速等十大维度,结合实战案例与最佳实践,助力构建低延迟、高稳定网络体系。
1524 0
|
10月前
|
弹性计算 运维 监控
资源闲置“杀手”:利用费用中心与云监控定时清理僵尸资源
在云计算时代,企业常因“僵尸资源”造成高达30%的云成本浪费。本文教你如何借助阿里云费用中心与云监控,精准识别闲置ECS、EIP、云盘等资源,结合运维编排OOS实现自动化清理,构建从发现到处置的闭环体系,推动云成本从被动支付转向主动治理,全面提升资源利用率与财务效能。(238字)
|
人工智能 Rust 数据挖掘
最高万元奖金|2025开源之夏x蚂蚁数据智能,12大硬核任务等你解锁
如果你想在暑期里收获:技能实战历练、大咖指导护航、高额现金奖励和荣誉证书... 那么一定不能错过 2025开源之夏!
|
人工智能
替代你的不是AI,而是会使用AI的人——生成式人工智能(GAI)认证成为职场新宠
在AI技术飞速发展的数字化时代,职场环境正经历深刻变革。生成式人工智能(GAI)认证的出现,为职场人士提供了提升自我、证明能力的新途径。由培生推出的GAI认证,涵盖核心技能与伦理知识,助力求职者脱颖而出。它不仅是职场晋升的加速器,还为企业认可的专业能力背书。拥抱AI、学习AI,通过GAI认证,让自己成为掌握AI技术的领先者,在竞争中保持优势。
|
网络协议 算法 Java
Netty基础—3.基础网络协议
本文详细梳理了计算机网络的基础知识,涵盖从物理层到应用层的各层协议及其功能。内容包括七层模型与四层模型对比、IP地址与子网划分、TCP三次握手及四次挥手过程、Socket编程原理、HTTP/HTTPS协议的工作机制等。同时深入探讨了Linux IO模型(阻塞、非阻塞、IO多路复用)及其应用场景,并分析了select、poll、epoll的区别。此外,还涉及Java IO读写的底层流程及同步异步、阻塞非阻塞的概念。这些知识点为理解网络通信和高性能服务器开发提供了全面的理论支持。