当前位置: 首页 > news >正文

《深入理解 Java 中的 this 关键字》

目录

一、this关键字的基本理解

二、this调用属性和方法

(一)一般情况

(二)特殊情况

三、this调用构造器

四、案例分析

(一)Account类

(二)Customer类

(三)Bank类

(四)BankTest测试类


一、this关键字的基本理解

  1. 当前对象(在方法中):在非静态方法中,this代表当前正在调用该方法的对象。通过this,我们可以访问当前对象的属性和其他方法。
  2. 当前正在创建的对象(在构造器中):在构造器中,this代表正在被创建的对象。可以使用this在构造器中调用其他构造器,进行构造器的链式调用。

二、this调用属性和方法

(一)一般情况

在非静态方法内,当方法的形参与对象的属性不同名时,我们通过对象调用方法,可以直接在方法内调用当前对象的属性或其他方法,此时即便不使用this,也能明确区分是当前对象的属性和方法。一般情况下我们都选择省略this结构,代码更加简洁。

(二)特殊情况

当方法的形参与对象的属性同名时,为了区分这两个变量,我们可以使用this修饰的变量表示属性,没有用this修饰的表示形参(局部变量)。

例如在以下代码中:

public class Customer {private String firstName;private String lastName;public Customer(String f, String l) {this.firstName = f; // 名,使用 this 区分属性和形参this.lastName = l; // 姓,使用 this 区分属性和形参}
}

三、this调用构造器

我们可以在类的构造器中,使用this(形参列表)的方式调用当前类中指定的其他构造器。要求this(形参列表)必须声明在当前构造器的首行,并且一个类中声明了n个构造器,则最多有n - 1个构造器可以声明this(形参列表)的结构。

public class Account {private double balance;public Account() {}public Account(double init_balance) {this.balance = init_balance;}
}

四、案例分析

以下是一个包含Account类、Customer类、Bank类以及BankTest测试类的案例,通过银行管理客户和账户的场景来展示this的用法。

(一)Account

该类表示账户,包含余额属性balance,以及存款deposit和取款withdraw方法。

public class Account {private double balance;public Account() {}public Account(double init_balance) {this.balance = init_balance;}public double getBalance() {return balance;}public void deposit(double amt) {if (amt > 0) {balance += amt;System.out.println("成功存入" + amt);}}public void withdraw(double amt) {if (balance >= amt && amt > 0) {balance -= amt;System.out.println("成功取出" + amt);} else {System.out.println("取款金额有误余额不足");}}
}

(二)Customer

表示客户,包含名firstName、姓lastName和账户account属性,以及相应的 getter 和 setter 方法。

public class Customer {private String firstName;private String lastName;private Account account;public Customer(String f, String l) {this.firstName = f;this.lastName = l;}public String getFirstName() {return firstName;}public String getLastName() {return lastName;}public Account getAccount() {return account;}public void setAccount(Account acct) {this.account = acct;}
}

(三)Bank

表示银行,包含用于保存多个客户的数组customers和记录存储的客户个数的变量numberOfCustomer。提供了添加客户addCustomer、获取客户个数getNumOfCustomers和获取指定索引位置客户getCustomer的方法。

public class Bank {private Customer[] customers;private int numberOfCustomer;public Bank() {customers = new Customer[10];}public void addCustomer(String f, String l) {Customer cust = new Customer(f, l);customers[numberOfCustomer] = cust;numberOfCustomer++;}public int getNumOfCustomers() {return numberOfCustomer;}public Customer getCustomer(int index) {if (index < 0 || index >= numberOfCustomer) {return null;} else {return customers[index];}}
}

(四)BankTest测试类

main方法中创建了一个银行对象,添加了两个客户,为第一个客户设置了账户,并进行了取款和存款操作,最后输出第一个客户的账户余额。

public class BankTest {public static void main(String[] args) {Bank bank = new Bank();bank.addCustomer("哥", "刘");bank.addCustomer("硕", "张");bank.getCustomer(0).setAccount(new Account(1000));bank.getCustomer(0).getAccount().withdraw(50);bank.getCustomer(0).getAccount().deposit(100);System.out.println("账户余额为" + bank.getCustomer(0).getAccount().getBalance());}
}

在这个案例中,Customer类的构造器中使用了this来区分形参和属性。同时,在BankTest测试类中,通过对象调用方法时,虽然没有显式使用this,但实际上也是在操作当前对象的属性和方法。

通过这个案例,我们可以更深入地理解this关键字在 Java 编程中的重要性和实际应用。它能够帮助我们更好地管理对象的属性和方法,提高代码的可读性和可维护性。

相关文章:

《深入理解 Java 中的 this 关键字》

目录 一、this关键字的基本理解 二、this调用属性和方法 &#xff08;一&#xff09;一般情况 &#xff08;二&#xff09;特殊情况 三、this调用构造器 四、案例分析 &#xff08;一&#xff09;Account类 &#xff08;二&#xff09;Customer类 &#xff08;三&…...

python文件自动分类(5)

完成了文件自动分类的操作后&#xff0c;我们一起来复习下&#xff1a; 首先&#xff0c;获取文件夹中所有文件名称&#xff0c;用 os.path.join() 函数拼接出要移动到的目标地址。然后&#xff0c;使用 os.path.exists() 函数判断目标文件夹是否存在&#xff0c;不存在用 os.m…...

【Unity-Lua】音乐播放器循环滚动播放音乐名

前言&#xff1a;Unity中UI节点 图1 如上所示&#xff0c;一开始本来是打算用ScrollView做的&#xff0c;觉得直接计算对应的文本位置就行&#xff0c;所以没用ScrollRect来做&#xff0c;可以忽略Scroll&#xff0c;Viewport这些名字。如下图&#xff1a;需要在一个背景Image…...

宏碁扩展Swift系列,推出四款全新AI笔记本电脑

Acer正在扩展其Swift笔记本产品线&#xff0c;推出四款新型号&#xff0c;每款都内置了AI功能。这些笔记本提供诸如Microsoft Copilot、Acer用户感应技术、Windows Studio效应、PurifiedVoice 2.0和PurifiedView等功能。其他功能还包括Wi-Fi 7和Bluetooth 5.4连接。 我们先来看…...

科研绘图系列:R语言差异基因四分图(Quad plot)

文章目录 介绍加载R包导入数据数据预处理画图参考介绍 四分图(Quad plot)是一种数据可视化技术,通常用于展示四个变量之间的关系。它由四个子图组成,每个子图都显示两个变量之间的关系。四分图的布局通常是2x2的网格,每个格子代表一个变量对的散点图。 在四分图中,通常…...

文字或图案点选坐标点返回

最近看到这篇文章中讲到极验图片验证码破解方案 https://blog.geetest.com/article/65aaaa944edc5ec343ba9f52efef0cdc 其中核心解决步骤如下&#xff0c;作者还贴心的贴出了CNN代码&#xff0c;真是用心良极&#xff1a; step 3&#xff1a;批量下载存储验证图片&#xff0c;…...

硬盘数据恢复软件TOP4榜单出炉,选对方法竟然如此重要

这年头&#xff0c;信息多得不得了&#xff0c;数据对我们来说太重要了。但是&#xff0c;不管是咱们自己还是公司&#xff0c;都可能碰上丢数据的倒霉事&#xff0c;特别是不小心把硬盘里的东西删了。数据一丢&#xff0c;不光可能亏钱&#xff0c;工作和生活也可能受影响。好…...

给自己复盘用的随想录笔记-栈与队列

用栈实现队列 难在出去 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; class MyQueue {private Stack<Integer> A;private Stack<Integer> B;public MyQueue() {Anew Stack<>();Bnew Stack<>();}public void push(int x) {A.push(x);}pu…...

微信小程序跳转到另一个微信小程序

引用&#xff1a;http://www.xmdeal.com/mobanjiaocheng/254.html 第一种方法&#xff1a; wx.navigateToMiniProgram 官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html wx.navigateToMiniProgram({appId…...

【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能

昨天写了一篇文章&#xff0c;使用fastapi直接操作neo4j图数据库插入数据的例子&#xff0c; 本文实现LLM大模型结合neo4j图数据库实现AI问答功能。 废话不多说&#xff0c;先上代码 import gradio as gr from fastapi import FastAPI, HTTPException, Request from pydantic…...

《信息技术 云计算 边缘云通用技术要求》国家标准发布,九州未来参编

日前&#xff0c;2024年第17号国家标准公告发布&#xff0c;由全国信标委云计算标准工作组组织制定、九州未来作为行业专家单位参编的《信息技术 云计算 边缘云通用技术要求》国家标准正式获批发布。 边缘云作为云计算技术的有效补充和拓展&#xff0c;能够实现将云计算能力拓展…...

NTFS硬盘支持工具Paragon NTFS for Mac 15.4.44 中文破解版

Paragon NTFS for Mac 15.4.44 中文破解版是一个底层的文件系统驱动程序,专门开发用来弥合Windows和Mac OS X之间的不兼容性&#xff0c;通过在Mac OS X系统下提供对任何版本的NTFS文件系统完全的读写访问服务来弥合这种不兼容性。为您轻松解决Mac不能识别Windows NTFS文件难题…...

66-java 类型擦除

类型擦除是Java类型信息在运行时的一个特性&#xff0c;它发生在泛型类型被擦除成它们的原始类型后&#xff0c;以及在运行时&#xff0c;由于类型擦除&#xff0c;泛型信息不可用。 例如&#xff0c;以下两个泛型类型&#xff1a; List<String> list1 new ArrayList&…...

25考研人数预计下降?这一届考研有哪些新趋势?

2025年考研时间线&#xff1a; 2024年9月&#xff1a;公共课及各院校考试大纲公布&#xff1b; 2024年9月下旬&#xff1a;预报名&#xff1b; 2024年10月&#xff1a;正式报名&#xff1b; 2024年11月&#xff1a;线上/线下确认&#xff1b; 2024年12月中下旬&#xff1a…...

比尔·盖茨对AI充满信心

The Verge与比尔盖茨进行了关于AI、错误信息和气候变化的对话。 比尔盖茨花费数十亿美元资助他认为将塑造未来的技术——从应对气候变化到消灭疾病。 盖茨在一部新的Netflix系列片《未来之路&#xff1a;比尔盖茨的境界》中深入探讨了这些话题。该系列于9月18日首播&#xff…...

Selenium 实现图片验证码识别

前言 在测试过程中&#xff0c;有的时候登录需要输入图片验证码。这时候使用Selenium进行自动化测试&#xff0c;怎么做图片验证码识别&#xff1f;本篇内容主要介绍使用Selenium、BufferedImage、Tesseract进行图片 验证码识别。 环境准备 jdk&#xff1a;1.8 tessdata&…...

基于云原生向量数据库 PieCloudVector 的 RAG 实践

近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;已然成为最热门的话题之一。工业界出现了各种内容生成工具&#xff0c;能够跨多种模态产生多样化的内容。这些主流的模型能够取得卓越表现&#xff0c;归功于创新的算法、模型规模的大幅扩展&#xff0c;以及海…...

内存泄漏的影响

(1)内存泄漏是什么&#xff1f; 内存泄漏是指程序运行过程中分配的内存没有被正确释放&#xff0c;导致这部分内存无法再次使用&#xff0c;从而造成内存资源的浪费。内存泄漏可能会导致系统性能下降、程序崩溃或者消耗过多的系统资源&#xff1b;内存泄漏通常发生在动态分配的…...

shell变量扩展你知道多少?

1. shell变量扩展 我们知道&#xff0c;${var}的形式可以获取变量var的值&#xff0c;但其实还可以有更多花式玩法。其中&#xff5e;表示用户根目录其实属于 波浪线扩展&#xff0c;这比较常见&#xff0c;不展开介绍了。 下面的每种情况中&#xff0c;word 都要经过波浪线扩…...

Compose中对于KeyEvent的处理

在开发Android TV时&#xff0c;遇到了一个需求&#xff0c;需要对遥控器发出的上下左右按键点击事件做处理。此处我们可以在Modifier.onKeyEvent中对按键事件做处理。此处我写了一个按钮的modifier模板如下。 private val buttonModifier Modifier.onKeyEvent {when {KeyEve…...

介绍一下多 Agent 如何实现工作?多个 Agent 之间如何协调和分工?

1. 题目分析 一个 Agent 能做的事情终归有限。当你试图让单个 Agent 去完成一个真正复杂的任务——比如从零开始做一次完整的市场调研并输出 PPT 报告——你会发现它要么因为上下文窗口塞满而"失忆"&#xff0c;要么因为角色定位太泛而每一步都做得半吊子。这就像让…...

告别盲调!用逻辑分析仪抓取STM32F429 TIM1的PWM波形,一步步教你分析频率、占空比和死区

从代码到波形&#xff1a;STM32F429 TIM1 PWM硬件验证全流程实战 调试PWM输出时最令人头疼的莫过于代码看似正确&#xff0c;但硬件端却毫无反应——引脚电压纹丝不动&#xff0c;或者波形完全不符合预期。这种"软件配置正确&#xff0c;硬件行为未知"的困境&#xf…...

C# 13主构造函数性能真相:实测对比传统构造器,GC第0代回收次数激增217%?答案藏在这3行IL指令里

第一章&#xff1a;C# 13主构造函数性能真相的终极叩问C# 13 引入的主构造函数&#xff08;Primary Constructors&#xff09;并非语法糖的简单叠加&#xff0c;其背后涉及编译器对类型初始化路径的深度重构。当使用 class Person(string name, int age) 声明时&#xff0c;编译…...

1995-1996 年阿拉斯加北坡 ARCSS/LAII 通量站点的北极植被样地

Arctic Vegetation Plots at ARCSS/LAII Flux Sites, North Slope, Alaska, 1995-1996 简介 本数据集提供了 1995 年和 1996 年 8 月在北坡北极系统科学/陆地-大气-冰相互作用&#xff08;ARCSS/LAII&#xff09;项目通量塔站点采集的植被覆盖、环境样地和土壤数据。19 个 AR…...

最新陪玩陪聊系统网站源码 娱乐交友系统公众号版

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 最新陪玩陪聊系统网站源码 娱乐交友系统 附安装教程 二、效果展示 1.部分代码 代码如下&#xff08;示例&#xff09;&#xff1a; <section id"cliens" class"cliens section-bg&…...

Legacy iOS Kit实战指南:让旧款iOS设备重获新生的完整解决方案

Legacy iOS Kit实战指南&#xff1a;让旧款iOS设备重获新生的完整解决方案 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-K…...

测试左移与右移:不仅仅是工作环节的变化

从被动执行到主动防御的质变传统瀑布模型中&#xff0c;测试常被压缩在开发周期末端&#xff0c;被动等待提测、疲于缺陷修复。而测试左移&#xff08;Shift-Left&#xff09;与右移&#xff08;Shift-Right&#xff09;的核心理念&#xff0c;是通过重构质量保障体系&#xff…...

ABB机器人编程避坑指南:从数据类型到运动指令的7个易错点

ABB机器人编程避坑指南&#xff1a;从数据类型到运动指令的7个易错点 第一次在RobotStudio里看到机器人因为数据类型错误突然停止时&#xff0c;我盯着报错信息足足愣了五分钟。这种经历在ABB机器人编程中并不罕见——从数据类型选择到运动指令参数设置&#xff0c;每个环节都可…...

3分钟打造专业数据大屏:DataRoom开源可视化设计器终极指南

3分钟打造专业数据大屏&#xff1a;DataRoom开源可视化设计器终极指南 【免费下载链接】DataRoom &#x1f525;基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器&#xff0c;具备目录管理、DashBoard设计、预览能力&#xff0c;支持MySQL、Oracl…...

适配内网需求的视频会议新选择:云屋快速部署赋能企业安全高效沟通

在现代企业日常运营中&#xff0c;高效顺畅的沟通协作是推动业务稳步增长的核心动力&#xff0c;而视频会议作为当下远程协作、内部沟通的核心工具&#xff0c;已经在各个行业得到了普及应用。目前市场上诞生了不少知名度较高的视频会议产品&#xff0c;腾讯会议就是其中受众最…...