当前位置: 首页 > 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…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...