用代码示例解释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 关键字使得代码更加清晰,同时提供了灵活的对象操作方式。

相关文章
|
26天前
|
JSON 数据格式 Windows
Qoder bug,我非常需要这个功能,不然无法做到强模型主导审核分工审计,性价比模型执行落地
Qwen3.8-Max 会话中,即使调用 Agent 时指定 input.model="qfmodel",子 agent 仍沿用主模型 UUID;而 CLI 启动时加 --model qfmodel 才真正生效(CLI 1.1.47,Windows)。
168 0
|
9月前
|
人工智能 算法 网络协议
2026大预测:人人都是“AI Agent指挥官”的时代真的来了
2026年,AI迈入“智能体时代”:AI Agent具备感知、决策、执行与反思能力,成为人类的“数字化分身”。普通人化身“AI指挥官”,依托动作预测、MCP/A2A协议、长程记忆三大基石,跨平台调度Agent军团完成复杂任务。人机关系升维为“战略指挥”,核心价值转向拆解力、审美判断与伦理风控。(239字)
819 4
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
传感器 自动驾驶 算法
自动驾驶还远吗?关键看“眼睛”
自动驾驶感知系统是智能车的“眼睛”,依赖摄像头、激光雷达、毫米波雷达等传感器实现环境感知。文章详解了感知架构、主流目标检测方法(如2D/3D检测、多传感器融合)、感知挑战(如极端天气、长尾问题)及发展趋势,并结合驭势科技实践,展示了数据闭环、BEV感知、全景分割等技术进展,推动自动驾驶向全天候、全无人目标迈进。
|
10月前
|
弹性计算 运维 监控
资源闲置“杀手”:利用费用中心与云监控定时清理僵尸资源
在云计算时代,企业常因“僵尸资源”造成高达30%的云成本浪费。本文教你如何借助阿里云费用中心与云监控,精准识别闲置ECS、EIP、云盘等资源,结合运维编排OOS实现自动化清理,构建从发现到处置的闭环体系,推动云成本从被动支付转向主动治理,全面提升资源利用率与财务效能。(238字)
|
存储 Kubernetes 监控
Kubernetes日志管理:使用Loki进行日志采集
通过以上步骤,在Kubernetes环境下利用LoKi进行有效率且易于管理地logs采集变成可能。此外,在实施过程中需要注意版本兼容性问题,并跟进社区最新动态以获取功能更新或安全补丁信息。
669 16
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
984 16
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
647 13
|
Java 索引
Java ArrayList中的常见删除操作及方法详解。
通过这些方法,Java `ArrayList` 提供了灵活而强大的操作来处理元素的移除,这些方法能够满足不同场景下的需求。
871 30
|
人工智能 数据可视化 开发者
FlowiseAI:34K Star!集成多种模型和100+组件的 LLM 应用低代码开发平台,拖拽组件轻松构建程序
FlowiseAI 是一款开源的低代码工具,通过拖拽可视化组件,用户可以快速构建自定义的 LLM 应用程序,支持多模型集成和记忆功能。
1811 14
FlowiseAI:34K Star!集成多种模型和100+组件的 LLM 应用低代码开发平台,拖拽组件轻松构建程序