Java 关键字 this 使用详解(通俗易懂)

this关键字主要有以下三个地方使用

        在方法体中引用当前对象,即其方法被调用的对象,以便将当前对象的实例变量或当前对象作为参数传递给其他方法。

① t = this.x;  要在方法中引用当前对象,可以使用关键字 this。

② return this;  作为当前方法的返回值等。

③ z.resetData(this); 关键字 this 指向当前对象,可用于任何可使用对象引用的地方:在句点表示法中,作为方法的参数;

下面是一些使用 this 的例子,其中的注释对相应的用法做了说明。

一、t = this.x;

this 用于指代当前对象,而 .x 则是该对象的属性。因此,this.x 表示当前对象的属性 x

public class MyClass {private int x;public MyClass(int x) {this.x = x; // 设置当前对象的属性 x}public int getX() {return this.x; // 返回当前对象的属性 x}public static void main(String[] args) {MyClass obj = new MyClass(10);int t = obj.getX(); // 使用 this.x 赋值给变量 t}
}

还有在内部类中,使用this关键字引用外部类对象。

public class OuterClass {private int value;public void outerMethod() {InnerClass inner = new InnerClass();inner.innerMethod();}public class InnerClass {public void innerMethod() {OuterClass.this.value = 10; // 使用this关键字引用外部类对象的成员变量}}
}

二、return this;

return this; 表示从当前方法中返回当前对象的引用,即返回指向当前对象的指针或引用。

当一个方法的返回类型是类本身(或该类的父类或接口),而不是基本数据类型或其他对象类型时,可以使用 return this; 来返回当前对象的引用。

例如,在一个类的方法中,如果你想要返回调用该方法的对象本身,而不是其他值,你可以使用 return this;。这在链式调用或者需要返回当前对象的场景中特别有用。

public class Leaf {public static void main(String[] args){Leaf leaf = new Leaf();leaf.increment().increment().increment().print();}int i = 0;Leaf increment(){i++;return  this;}void print(){System.out.println("i = " + i);}
}

increment方法用于递增实例变量i的值并返回当前对象的引用,以便支持方法链的形式调用,实现了在一个语句中对同一个对象进行了多次操作

三、Peeler.peel(this);

Apple 需要调用 Peeler.peel() 方法,它是一个外部的工具方法,为了将自身传递给外部方法,Apple必须使用 this 关键字。

/*** 这段代码实现了一个简单的场景,演示了对象间的方法调用和 toString 方法的使用。* 在 main 方法中创建了一个 Person 对象,并调用其 eat 方法,传入一个新创建的 Apple 对象。* eat 方法内部调用了传入的 Apple 对象的 getPeeled 方法,获取削皮后的苹果对象。* getPeeled 方法内部调用了 Peeler 类的 peel 静态方法,对当前苹果对象进行削皮操作,并返回结果。* 削皮操作完成后,削皮后的苹果对象被打印输出到控制台。*/public class PassingThis {public static void main(String[] args) {//在 main 方法中创建了一个 Person 对象,并调用其 eat 方法,传入一个新创建的 Apple 对象。new Person().eat(new Apple());}
}class Person {// Person 类中定义了一个 eat 方法,接受一个 Apple 对象作为参数。调用传入的 Apple 对象的 getPeeled 方法,获取削皮后的苹果对象,然后打印输出这个削皮后的苹果对象。public void eat(Apple apple) {Apple peeled = apple.getPeeled();// 直接输出 peeled 对象,会调用其 toString 方法System.out.println("这个苹果是:" + peeled);}
}class Peeler {static Apple peel(Apple apple) {// Peeler 类中定义了一个静态方法 peel,接受一个 Apple 对象作为参数,并对这个苹果对象进行削皮操作,削皮操作非常简单,只是直接返回传入的苹果对象,没有进行实际的削皮操作。return apple;}
}class Apple {Apple getPeeled() {// Apple 类中定义了一个 getPeeled 方法,它返回一个经过削皮后的苹果对象。// 在这个方法中,通过调用 Peeler 类的 peel 静态方法来实现对当前苹果对象的削皮操作,并将结果返回。return Peeler.peel(this);}@Overridepublic String toString() {// 在 Apple 类中重写了 toString 方法,使其返回一个描述削皮后苹果的字符串,这样在打印输出时就会显示你自定义的描述,而不是默认的类名和哈希码。return "削皮后的苹果";}
}

注意:

this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。同时,如果在方法内部调用同一个类的同一个方法,就直接调用,不用加this。

public class Example {private int value;public Example(int value) {this.value = value;}// 方法内部使用this关键字引用当前对象,并返回当前对象的值public int getValue() {return this.value;}// 方法内部调用同一个类的同一个方法,不需要加thispublic void printValue() {int val = getValue(); // 直接调用getValue方法System.out.println("Value: " + val);}public static void main(String[] args) {Example example = new Example(10);example.printValue();}
}

        这个示例中,Example类有一个私有成员变量value和两个公共方法getValue和printValue。在getValue方法中,使用了this关键字来引用当前对象,并返回value的值。而在printValue方法中,直接调用了getValue方法,不需要加this关键字。在main方法中,创建了Example类的实例对象,并调用了printValue方法,输出value的值。

参考:

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

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

相关文章

matlab学习(二)(4.2-4.8)

一、DCT变换原理 (1)DCT的基本原理是将实数信号转换为频域表示,离散余弦变换(DCT)是一种将实数函数转换为余弦函数的方法。它的基本原理是将实偶函数的离散傅立叶变换(DFT)简化,使得…

[java]网络编程

网络编程概述 计算机网络: 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序…

题库管理系统-基于Springboot实现JAVA+SQL离散数学题库管理系统(完整源码+LW+翻译)

基于Springboot实现JAVASQL离散数学题库管理系统(完整源码LW翻译) 概述: 本系统具体完成的功能如下: 1题库的管理与维护:新题的录入,修改,删除等功能。 2生成试卷:包括自动生成与手工改动,要…

Java学习之String类的本质及内部类

目录 常量池 API文档如何阅读 String类常用的方法 示例 内部类 特点 成员内部类 非静态内部类 成员变量访问要点 内部类的访问 示例 在别的类中调用 静态内部类 定义方式 使用要点 示例 匿名内部类 示例 局部内部类 面向对象知识总结思维导图: S…

使用msf进行有防火墙限制的3389端口转发

使用msf进行有防火墙限制的3389端口转发 这里主要是针对在内网中遇到需要开启3389的时候,发现存在防火墙,就没有办法直接远程连接,这个时候就可以使用端口转发使用msf,使用前记得先初始化,连接好数据库这里先使用msf进…

二.音视频编辑-媒体组合-播放

引言 当涉及到音视频编辑时,媒体资源的提取和组合是至关重要的环节。在iOS平台上,AVFoundation框架提供了丰富而强大的功能,使得媒体资源的操作变得轻松而高效。从原始的媒体中提取片段,然后将它们巧妙地组合成一个完整的作品&am…

51之定时器与中断系统

目录 1.定时器与中断系统简介 1.1中断系统 1.2定时器 1.2.1定时器简介 1.2.2定时器大致原理及其配置 1.2.3定时器所需的所有配置总介 2.定时器0实现LED闪烁 3.使用软件生成定时器初始化程序 1.定时器与中断系统简介 1.1中断系统 首先,我们需要来了解一下什么…

设计模式:生活中的享元模式

享元模式的概念可以用日常生活中的图书馆来类比。想象一下,图书馆中的书籍就像是需要大量重复使用的对象。 图书馆中的书籍:享元对象 在图书馆中,每本书都有一个或多个副本。如果每个想要阅读特定书籍的读者都去购买一个新副本,…

深入浅出 -- 系统架构之单体到分布式架构的演变

一、传统模式的技术改革 在很多年以前,其实没有严格意义上的前后端工程师之分,每个后端就是前端,同理,前端也可以是后端,即Ajax、jQuery技术未盛行前的年代。 起初,大部分前端界面很简单,显示的…

AcWing1402.星空之夜

【题目链接】1402. 星空之夜 - AcWing题库 夜空深处,闪亮的星星以星群的形式出现在人们眼中,形态万千。 一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合。 一个星群不能是一个更大星群的一部分。 星群可能是相似的。 如…

上传下载图片的

上传图片 1.上传图片的方法一般是用Upload组件直接上传File的信息 2.通过FormData对象上传 FormData对象是一个JavaScript对象,可以用来存储表单数据 headers:{“Content-type”:“multipart/form-data”} 3.通过Form表单上传 在HTML中创建一个表单&#xff0c…

【蓝桥杯】GCD与LCM

一.概述 最大公约数(GCD)和最小公倍数(Least Common Multiple,LCM) 在C中,可以使用 std::__gcd(a, b)来计算最大公约数 1.欧几里德算法/辗转相除法 int gcd(int a,int b){return b?gcd(b, a%b):a; } 2…

Tensorboard以及Transforms初步学习

一.前情提要 1.本文是代码结合知识点,注释即为知识点 2.主要详细讲解Tensorboard以及Transforms代码以及基础知识 3.若想深入学习,建议阅读 P3. Python学习中的两大法宝函数(当然也可以用在PyTorch)_哔哩哔哩_bilibili 二.简述…

抖音运营技巧

1、视频时长 抖音的作品是否能够继续被推荐,取决于综合数据,包括完播率、点赞率、评论率、转发率和收藏率等。其中,完播率是最容易控制的因素。对于新号来说,在没有粉丝的初期,发布过长的视频可能会导致无人观看。因此…

金田金业带你一文了解现货黄金开户注意事项

现货黄金作为一种受欢迎的投资品种,吸引了越来越多的投资者。然而,在进行现货黄金开户时,有一些重要的注意事项需要牢记。本文将为您详细介绍现货黄金开户的九大关键要点,确保您能够在投资过程中做出明智的决策。 第一&#xff0c…

汇编——SSE对齐

SIMD是(Single Instrument Multi Data),MMX实现了SIMD;SSE是(Streaming SIMD Extension),它取代了MMX;后来AVX(Advanced Vector Extension,高级向量扩展)对SSE进行了扩展…

Java- maven下载jar包,提示找不到,Could not find artifact

1、执行下面命令行 mvn install:install-file -Dfile/home/quangang/桌面/isv-sdk-2.0.jar -DgroupIdcom.jd -DartifactIdisv-sdk -Dversion2.0 -Dpackangjar 2、然后这里要加上jar包

C语言:strlen和sizeof的适用场景

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️感谢大家点赞👍&…

macOS上QT打开麦克风和摄像头的权限问题

同样的代码在Windows上可以轻松操作麦克风和摄像头,特别是用QT这种跨平台的框架。但是对macOS这种权限要求完善的系统还需要进行一些配置,那就是增加Info.plist属性配置文件。如果是之前的早期5.x版本的QTCreator因为使用的是qmake构建系统,估…

No dashboards are active for the current data set.

再次记录一下这个离谱的问题 之前出现这个问题是因为目录没写对 今天遇到这个问题的原因是目录是对的,跟目录是否带有中文也没关系 是writer写入的时候写的是空的,离谱的是写入是空的情况下也会生成events日志文件,看起来好像成功写入了一样&…