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

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...