实用指南:【Java】P15 Java 深入理解 “this” 关键字

news/2025/11/9 10:58:31/文章来源:https://www.cnblogs.com/yxysuanfa/p/19203918

目录

  • 前言
  • 问题的起源:当形参“撞名”属性
  • 什么是 this?
  • this 的三种核心用法
    • 1. 调用成员变量
    • 2. 调用成员方法
    • 3. 调用构造器
  • 总结

在这里插入图片描述

前言

在 Java 编程中,我们经常会遇到一个神秘的关键字:this。对于初学者来说,它似乎无处不在,但又难以捉摸。它到底是什么?我们为什么需要它?又该在何时何地使用它呢?

本文将带你深入浅出地剖析 this 关键字,通过清晰的示例,让你彻底掌握它的三种核心用法。


问题的起源:当形参“撞名”属性

让我们从一个非常常见的场景开始。假设我们正在创建一个 Person 类,它有 nameage 两个属性。我们通常会为这些属性提供 set 方法,以便外部可以设置它们的值。

class Person {
String name;
int age;
// 为 age 属性设置值的方法
public void setAge(int a) {
age = a;
}
}

上面的代码工作得很好。但是,为了让参数名更具可读性,我们往往倾向于将参数名写得和属性名一样,比如这样:

class Person {
String name;
int age;
public void setAge(int age) {
// 疑似形参=形参
age = age;
}
}

现在问题来了:在 setAge 方法内部,我们希望两个都叫 age 的变量中,一个是类的属性(成员变量),另一个是方法的参数(局部变量)。当我们写 age = age; 时,Java 编译器会如何理解?

根据变量的“就近原则”,方法内的 age 会被优先解释为方法的参数。所以 age = age; 这行代码实际上变成了“把参数 age 的值赋给参数 age 自己”,这显然不是我们想要的!类的属性 age 从始至终都没有被赋值。

为了解决这种命名冲突,this 关键字闪亮登场。


什么是 this?

在 Java 中,this 是一个关键字,也是一个隐藏的引用。它指向当前对象

简单理解:

  • 当你在一个方法中调用 this 时,它就代表调用这个方法的那个对象
  • 当你在一个构造器中调用 this 时,它就代表正在被创建的那个对象

现在,让我们用 this 来解决刚才的问题:

class Person {
String name;
int age;
public void setAge(int age) {
// 使用 this.age 来明确指定这是类的属性
this.age = age;
// 等号右边的 age,因为没有 this 修饰,所以是方法的形参
}
}

通过 this.age,我们清晰地告诉编译器:“嘿,我要访问的是这个对象自己的 age 属性,而不是方法的参数。” 这样,赋值就变得准确无误了。


this 的三种核心用法

this 关键字主要用于以下三个方面:

  1. 调用成员变量
  2. 调用成员方法
  3. 调用构造器

1. 调用成员变量

这是 this 最常见的用法,就像我们上面看到的那样。

public void setName(String name) {
this.name = name; // 必须使用 this
}
  • 一般情况(可以选择省略): 当没有命名冲突时,this. 是可选的。编译器会自动帮你找到对象的属性。但是,为了代码的可读性,有些开发者也习惯性地加上 this
public void printAge() {
// 这两种写法效果完全一样
System.out.println("My age is: " + age);
System.out.println("My age is: " + this.age); // 加上 this 更清晰
}

2. 调用成员方法

与调用成员变量类似,你也可以使用 this 来调用当前对象的其他方法。

class Calculator {
public void add(int a, int b) {
System.out.println("Sum: " + (a + b));
}
public void calculateAndShow(int x, int y) {
System.out.println("Performing calculation...");
// 调用当前对象的 add 方法
this.add(x, y); // 这里的 this 同样可以省略
}
}

calculateAndShow 方法中,this.add(x, y)add(x, y) 是等价的。this 再次强调了“我正在调用我自己(这个对象)的另一个方法”。

3. 调用构造器

这是 this 一个非常强大且特殊的功能。当你的类有多个重载的构造器时,你可以在一个构造器中使用 this(形参) 来调用另一个构造器,从而避免代码重复。

让我们还是以 Person 类为例。假设我们希望提供三种创建 Person 对象的方式:

  1. 不提供任何信息。
  2. 只提供姓名。
  3. 提供姓名和年龄。
class Person {
String name;
int age;
// 1. 默认构造器
public Person() {
System.out.println("一个新的 Person 对象被创建了!");
}
// 2. 只提供姓名的构造器
public Person(String name) {
this(); // 调用上面的默认构造器
this.name = name;
}
// 3. 提供姓名和年龄的构造器
public Person(String name, int age) {
this(name); // 调用只提供姓名的构造器
this.age = age;
}
}

在上面的例子中:

  • Person(String name, int age) 构造器通过 this(name) 调用了 Person(String name) 构造器。
  • Person(String name) 构造器又通过 this() 调用了 Person() 默认构造器。

这样就形成了一个“构造器调用链”,极大地简化了代码,提高了复用性。

使用 this(...) 调用构造器时,必须遵守以下规则:

  1. 格式固定: 必须是 this(参数列表) 的形式。
  2. 必须在首行:this(...) 的调用语句必须是构造器内的第一行代码。
  3. 数量限制: 一个构造器中最多只能调用一个 this(...)。因为它必须在首行,所以不可能有两个。

总结

this 关键字是 Java 面向对象编程中的一个基础且重要的概念。它始终指向当前对象,为我们解决了变量命名冲突的问题,并提供了一种在构造器之间相互调用的优雅方式。

记住这几点:

  • 核心定义:this 代表当前对象实例。
  • 区分变量:局部变量成员变量同名时,this.变量 指的是成员变量
  • 调用方法:this.方法() 调用当前对象的其他方法,this 通常可省略。
  • 链式构造:this(参数) 在构造器中调用另一个重载的构造器,但必须放在第一行

希望通过这篇博文,你对 this 关键字有了更深刻的理解。在你的编码实践中,请大胆地使用它吧!


2025.10.13 西直门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/960318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年服务贴心的离婚财产分割律师口碑指数榜

2025年服务贴心的离婚财产分割律师口碑指数榜行业背景与市场趋势随着我国离婚率的持续攀升,离婚财产分割法律服务需求呈现爆发式增长。根据民政部最新统计数据,2024年全国离婚登记数量达到478.6万对,同比增长6.8%,…

php项目出现提示 no input file specified的解决方法集锦

问题分析与解决方案集锦 当PHP项目访问出现 "No input file specified" 错误且存在 .user.ini 文件时,核心问题是该文件中的配置指令干扰了PHP的正常执行。请按以下顺序排查: 第一步:快速锁定问题源临时重…

2025年靠谱的白水苹果精品推荐厂家

2025年靠谱的白水苹果精品推荐厂家白水苹果产业概况与市场趋势白水县作为中国西北地区重要的苹果生产基地,凭借其独特的地理环境和气候条件,已成为"世界最佳苹果优生区"之一。根据中国果品流通协会2024年发…

2025年诚信的建筑业体系认证管理体系认证专家推荐榜

2025年诚信的建筑业体系认证管理体系认证专家推荐榜行业背景与市场趋势随着中国建筑业的持续发展和规范化进程加速,行业对质量管理体系认证的需求呈现爆发式增长。根据中国建筑业协会最新发布的《2024年中国建筑行业发…

20251109-2

我才发现我这碰撞检测写的简直是一坨屎,稍微优化了一下,虽然依旧一坨屎。<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewpor…

深入解析:让AI说“人话“:TypeChat.NET如何用强类型驯服大语言模型的“野性“

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年评价高的专利评估综合口碑榜

2025年评价高的专利评估综合口碑榜行业背景与市场趋势随着全球科技创新步伐加快,知识产权已成为企业核心竞争力的重要组成部分。根据世界知识产权组织(WIPO)最新数据显示,2024年全球专利申请量达到380万件,同比增…

2025年口碑好的耐高温劳保鞋厂家推荐及选择指南

2025年口碑好的耐高温劳保鞋厂家推荐及选择指南行业背景与市场趋势随着我国工业安全意识的不断提升,劳保用品市场规模持续扩大。据中国劳动防护用品行业协会统计,2024年我国劳保鞋市场规模已达85亿元,预计2025年将突…

基于高光谱成像和偏最小二乘法(PLS)的苹果糖度检测MATLAB实现

一、程序框架设计二、实现 1. 图像加载与预处理 %% 参数设置 clear; clc; imgPath = apple_hsi.mat; % 高光谱图像路径 roiSize = [50,50]; % ROI区域尺寸 wavelength = 400:10:1000; % 波长范围(nm)%% 加载数据…

2025年优质的青年鸡高评价榜

2025年优质的青年鸡高评价榜行业背景与市场趋势近年来,随着我国禽蛋产业规模化、标准化程度不断提升,青年鸡专业化养殖已成为行业重要发展方向。据中国畜牧业协会统计数据显示,2024年全国青年鸡市场规模已达185亿元…

day07-一键生成儿歌视频工作流

今日内容 1 一键生成儿歌背单词视频 1.1 目标 # 1 用户输入一个主题---》生成中英文儿歌,方便小朋友记忆不同主题的单词-动物--》10个动物单词儿歌-蔬菜--》10种蔬菜单词儿歌# 2 用到python代码--》稍微有些难度1.2 工…

实用指南:手机群控软件在游戏运营中的风险管控技术实现

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Zabbix服务告警: Zabbix server: Utilization of icmp pinger processes over 75%

在 Zabbix 中,icmp pinger 主要用于执行主机 ping 检测。当告警提示“Utilization over 75%”,意味着所有 icmp pinger 进程在大部分时间都在忙碌中,系统没有足够的空闲进程来及时处理新的 Ping 请求。该值可以通过…

Process Monitor 学习笔记(5.2):事件模型与五大类操作(文档/注册表/进程/网络/Profiling

Process Monitor 学习笔记(5.2):事件模型与五大类操作(文档/注册表/进程/网络/Profiling2025-11-09 10:38 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !import…

flask: 用gunicorn部署flask项目

一,安装第三方库 $ pip3 install gunicorn gevent 二,使用 -D 后台运行(守护进程) -b 指定绑定地址和端口 -w 设置 4 个工作进程 $ gunicorn -D -b 127.0.0.1:8000 -w 4 app:app 测试 效果: 用ss查看端口是否已使…

2025年评价高的盐城短视频剪辑用户好评榜

2025年评价高的盐城短视频剪辑用户好评榜行业背景与市场趋势随着短视频行业的蓬勃发展,2025年中国短视频市场规模预计将达到1.5万亿元人民币,年复合增长率保持在25%以上。据《2025中国短视频行业白皮书》显示,短视频…

使用Math库执行数值计算

在程序设计和软件开发中,数值计算是核心组成之一,尤其是涉及到工程、科学研究和数据分析等领域。在Python语言中,数值计算常常依赖于内建的 math库,该库提供了一系列的数学函数以支持复杂的数学运算。 首先,math库…

实用指南:Guava Cache 高性能本地缓存库详解与使用案例

实用指南:Guava Cache 高性能本地缓存库详解与使用案例pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

深度学习进阶(一)——从 LeNet 到 Transformer:卷积的荣光与注意力的崛起 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年热门的剧院舞台灯光厂家最新推荐榜

2025年热门的剧院舞台灯光厂家最新推荐榜行业背景与市场趋势随着文化娱乐产业的蓬勃发展,全球舞台灯光市场规模持续扩大。据最新行业报告显示,2024年全球舞台灯光市场规模已达到85亿美元,预计到2025年将突破90亿美元…