学习-Java类和对象之this关键字

:学习-Java类和对象之this关键字

100

  • 任务要求
  • 参考答案
  • 评论22
  • 任务描述
  • 相关知识
    • this 关键字
  • 编程要求
  • 测试说明

任务描述

本关任务:编写一个商品结算的小程序。

相关知识

为了完成本关任务,你需要掌握:this 关键字的使用。

this 关键字

大部分时候,普通方法访问其他方法、成员变量时无需使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀。

接下来我们看个例子:

 
  1. public class Demo {
  2. String name;
  3. public Demo(String name) {
  4. this.name = name;
  5. }
  6. }

我们可以看到成员变量与形参的名称相同,都为 name,那么我们如何区分呢?

在 Java 语言中规定使用 this 关键字来代表本类对象的引用。在上述代码中, this.name 就指的是 Demo 类中的成员变量 name, 而等于号右边的 name 就是形参,这句话的意思是把形参 name 的值赋值给成员变量 name。

接下来我们进行一个测试。

 
  1. public class Demo {
  2. String name = "张三";
  3. public Demo(String name) {
  4. this.name = name;
  5. }
  6. public static void main(String[] args) {
  7. Demo demo = new Demo("李四");
  8. System.out.println(demo.name);
  9. }
  10. }

执行结果:

 
  1. 李四

当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数。

this 关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或实例变量。

来看个例子:

 
  1. public class Demo {
  2. public void KeyBoard(){
  3. System.out.println("准备好了键盘");
  4. }
  5. // 定义一个方法,该方法需要借助 KeyBoard 方法
  6. public void WritingCode(){
  7. // 使用this引用run方法
  8. this.KeyBoard();
  9. System.out.print("我正在敲代码");
  10. }
  11. public static void main(String[] args) {
  12. Demo demo = new Demo();
  13. demo.WritingCode();
  14. }
  15. }

执行结果:

 
  1. 准备好了键盘
  2. 我正在敲代码

在现实世界里,对象的一个方法依赖于另一个方法的情形很常见,例如,吃饭方法依赖于拿筷子方法。这种依赖都是同一个对象两个方法之间的依赖。因此,Java 允许对象的一个成员直接调用另一个成员,可以省略 this 前缀。也就是说,将上面的 run( ) 方法改为如下形式也完全正确。

 
  1. public void run() {
  2. jump();
  3. System.out.println("正在执行run方法");
  4. }

大部分时候,一个方法访问该类中定义的其他方法、成员变量时,加不加 this 前缀的效果是完全一样的。

需要注意的是,对于 static 修饰的方法而言,可以使用类来直接调用该方法,如果在 static 修饰的方法中使用 this 关键字,则这个关键字就无法指向合适的对象。所以,static 修饰的方法中不能使用 this 引用。并且 Java 语法规定,静态成员不能直接访问非静态成员。

省略 this 前缀只是一种假象,虽然程序员省略了调用 WritingCode() 方法之前的 this,但实际上这个 this 依然是存在的。

this( ) 用来访问本类的构造方法,括号中可以有参数,如果有参数就是调用指定的有参构造方法。

下面定义一个 Student 类,使用 this( ) 调用构造方法给 name 赋值,Student 类的代码如下所示:

 
  1. public class Student {
  2. String name;
  3. // 无参构造方法
  4. public Student() {
  5. this("张三");
  6. }
  7. // 有参构造方法
  8. public Student(String name) {
  9. this.name = name;
  10. }
  11. public static void main(String[] args) {
  12. Student stu = new Student();
  13. System.out.println(stu.name);
  14. }
  15. }

执行结果:

 
  1. 张三

注意:

  • this( ) 不能在普通方法中使用,只能写在构造方法中;
  • 在构造方法中使用时,必须是第一条语句。
/*** 任务:编写一个商品结算的小程序* 类名为:Shop*/// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/public class Shop {// 定义该商品的两个属性:价格(double)和数量(int)double price;int total;// 将形参的值赋值给成员变量public Shop(double price, int total) {this.price=price;this.total=total;}// 该方法实现计算价钱的功能,将计算结果返回,价钱 = 价格 * 数量public double sum() {return price*total;}
}/********** End **********/

 

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

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

相关文章

linux:du和df区别

文章目录 1. 概述2. du 命令2. df 命令3. 区别总结 1. 概述 du 和 df 都是 Linux 系统中用于查看磁盘空间使用情况的命令,但它们的功能和用法有所不同。 2. du 命令 du 是 “disk usage” 的缩写,用于显示文件或目录的磁盘使用情况。du 命令用于查看指…

基于Socket简单的UDP网络程序

⭐小白苦学IT的博客主页 ⭐初学者必看:Linux操作系统入门 ⭐代码仓库:Linux代码仓库 ❤关注我一起讨论和学习Linux系统 1.前言 网络编程前言 网络编程是连接数字世界的桥梁,它让计算机之间能够交流信息,为我们的生活和工作带来便利…

机器学习笔记 - 深度学习遇到超大图像怎么办?使用 xT 对极大图像进行建模论文简读

作为计算机视觉研究人员,在处理大图像时,避免不了受到硬件的限制,毕竟大图像已经不再罕见,手机的相机和绕地球运行的卫星上的相机可以拍摄如此超大的照片,遇到超大图像的时候,我们当前最好的模型和硬件都会达到极限。 所以通常我们在处理大图像时会做出两个次优选择之一:…

gbm模型做分类

导入相关的包 from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report from lightgbm import LGBMClassifier from sklearn.preprocessing import PolynomialFeatures获取df中的格式类型 object_columns df.select_dtype…

java给出一个不多于5位的正整数(1)求出它是几位数(2)分别输出每一位数字(3)按逆序输出各位数字

给出一个不多于5位的正整数 (1)求出它是几位数 (2)分别输出每一位数字 (3)按逆序输出各位数字 public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println(&qu…

lottery-攻防世界

题目 flag在这里要用钱买,这是个赌博网站。注册个账号,然后输入七位数字,中奖会得到相应奖励。 githacker获取网站源码 ,但是找到了flag文件但是没用。 bp 抓包发现api.php,并且出现我们的输入数字。 根据题目给的附…

推荐一款很强大的SCADA工业组态软件

可以广泛应用于化工、石化、制药、冶金、建材、市政、环保、电力等几十个行业。 I官网网站:www.hcy-soft.com |体验地址:http://www.byzt.net:60/sm/ 一、产品简介 BY组态是完全自主研发的集实时数据展示、动态交互等一体的全功能可视化平台。帮助物联网、工业互联网、电力能…

怎么防止文件被拷贝,复制别人拷贝电脑文件

怎么防止文件被拷贝,复制别人拷贝电,脑文件 防止文件被拷贝通常是为了保护敏感数据、知识产权或商业秘密不被未经授权的人员获取或传播。以下列出了一系列技术手段和策略,可以帮助您有效地防止文件被拷贝。 1. 终端管理软件: 如安企神、域智…

Node.js创建第一个web服务

如果用PHP来编写后端代码,需要用Apache或者Nginx的服务器,来处理客户的请求响应。对于Node.js时,不仅实现了应用,同时还实现了整个HTTP服务器. 安装 Node Snippets插件(编程自带提示) console.log(你好nodejs); //表…

MySQL高级篇(B-Tree、Btree)

目录 1、Btree(B-Tree) 1.1、B-Trees的特点 二叉树缺点:顺序插入时,会形成一个链表,查询性能大大降低。大数据量情况下,层级较深,检索速度慢。红黑树:大数据量情况下,层…

虚拟主机WordPress网站安装教程

一般的企业官网,简站WordPress小编都推荐使用虚拟主机,用虚拟主机搭建一般的WordPress企业官网足够用了。最主要的好处是使用虚拟主机可以省去了主机维护的成本。 下面是以简站WordPress主题在虚拟主机搭建企业官网为例子,写的一个教程&…

多叉树题目:子树中标签相同的结点数

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:子树中标签相同的结点数 出处:1519. 子树中标签相同的结点数 难度 5 级 题目描述 要求 给你一个树(即一个连通的无向无环图…

JDK下载及安装说明

1.JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页。 在下载页面,点击Java。 选择Java (JDK) for Developers,点击。 在 Java SE Downloads 页面,点击中间的DO…

app上架-您的应用存在最近任务列表隐藏风险活动的行为,不符合华为应用市场审核标准。

上架提示 您的应用存在最近任务列表隐藏风险活动的行为,不符合华为应用市场审核标准。 修改建议:请参考测试结果进行修改。 请参考《审核指南》第2.19相关审核要求:https://developer.huawei.com/consumer/cn/doc/app/50104-02 造成原因 …

反转链表(C语言)

反转链表是一种常见的链表操作,可以通过动态图来说明其过程: 假设有一个包含节点 A -> B -> C -> D -> E 的链表,要将其反转成 E -> D -> C -> B -> A。 初始状态: A -> B -> C -> D -> E创…

后端说处理了跨域但没有生效

场景: 常见的跨域报错,一般都是由后端进行setHeader/*什么的。但是现在这种情况就是后端说他们做了处理。但是我这边请求还是报错。 withCredentials: with-credentials用来设置是否发送cookie,如果为true就会在跨域请求时候携带cookie&…

libVLC 提取视频帧

在前面的文章中,我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。 libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow->winId()); 如果我们想要提取每一帧数据,将数据保存到本地,该如何操作呢&#x…

Golang 开发实战day09 - package Scope

🏆个人专栏 🤺 leetcode 🧗 Leetcode Prime 🏇 Golang20天教程 🚴‍♂️ Java问题收集园地 🌴 成长感悟 欢迎大家观看,不执着于追求顶峰,只享受探索过程 Golang 教程09 - package Sc…

算法练习第12天|● 239. 滑动窗口最大值● 347.前 K 个高频元素

239.滑动窗口的最大值 力扣原题 题目描述: 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff…

【Nginx 配置详解】:动态文件名设置与正则表达式

Nginx 配置详解:动态文件名设置与正则表达式 Nginx 是一款轻量级的 Web 服务器/反向代理服务器,它的高稳定性、丰富的功能集、简单的配置和低资源消耗使其成为当今最受欢迎的服务器之一。本文将深入探讨 Nginx 配置中的一些关键概念,特别是如…