百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

还没弄明白Java中的this关键字吗,那来看这篇就够了

myzbx 2025-07-21 16:28 29 浏览

今天在上课时,冉冉大妹纸拉着我问:小哥哥,小哥哥,听说你在学Java,那你知道this关键字吗?

我:啊?this啊? (完了完了,学习时候学的什么也不是,这下被问到了,还是个妹纸,答不上来岂不尴尬)。

冉冉妹纸:你到底知道?不是吧,不是吧,听说你学了很久的Java,不会连this关键字都不知道吧!

我:会啊,那还不简单,等我慢慢给你讲来(giao,把握住机会,加分项啊这可是,必须说出点什么)

好了,来吧,给你讲讲this关键字

this关键字的作用:

1、区分成员变量和局部变量(当成员变量和局部变量重名时)

2、可在构造方法中调用同一个类的其他构造方法(但是规定this只能写在构造方法的第一行)

3、能调用构造方法,当然也能调用普通方法啦(在同一个类中的方法内部,其实不必要使用this来调用,直接写出方法名即可,但是有的人会认为,写出this会让代码看起来更规范。我认为这个完全没必要。这里看个人习惯吧。)~

我:你看,这不是很简单吗?

冉冉:什么啊,就这?我知道啊,你这不是在给我说点没用的话嘛。

我:别气嘛,那我再给你扯点(绞尽脑汁的想)

4、this关键字还可以作为当前的对象的引用进行返回,我让你看看代码你就理解了

public class Student {
    public Student log2(){
        System.out.println("直接返回一个Student的引用");
        return this;
    }
}

就这么写。你看,多简单

冉冉:没听懂,返回什么对象什么引用啊。。。

我:嗯。。。。好吧,那我再给你解释一下。再看一下代码!

public class TestMain {
    public static void main(String[] args) {
        Student student = new Student();
        Student student2 = student.log2();
        System.out.println(student == student2);
    }
}

你看,你 new 个对象(对象引用),然后去调用log2这个方法,就会再返回一个对象,此时这个对象和你new的那个是同一个。但是如果你直接return new Student(); 那此时这个对象就是一个新的对象,所以说,this能返回当前对象(引用)。懂了吧!

冉冉:这样啊,那你这么说,我就知道了。

我:再给你掰扯点,别着急;

你知道如果有两个Student的对象时,他们都要去调用同一个方法,怎么才能知道,到底是哪个对象在调用这个方法呢?比如这样的代码

public class Student {
    public void log2(int i) {
        System.out.println(i); 
    }
}
public class TestMain {
    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        s1.log2(2);
        s2.log2(3);
    }
}

是不是觉得这是两个不同对象的引用啊,当然能区分是谁在调用了啊!

其实本质不是这样滴

你在写完代码后,编译器悄悄在帮助你做了一个工作,为了让你省心呢,多么贴心啊,我要是....

冉冉:你倒是说啊,到底做了什么?

我:好吧;我说。。。

当你在调用方法的时候,其实编译器悄悄在你传的参数前边加了当前的对象,像这样

s1.log2(s1,2);
s2.log2(s2,3);

当然,如果你这么写代码,那编译器肯定会说:这点小事情,还是我替你做吧,就不麻烦小主人了,然后无情的给了你一个红波浪线;

冉冉:真的假的啊,说的这么玄乎。

我:,你还不信,看下边的代码,我们在方法上做个小改动

public class Student {
    public void log2(int i) {
        System.out.println(this + " " + i);
    }
}
public class TestMain {
    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        System.out.println("s1的地址----->" + s1);
        System.out.println("s2的地址----->" + s2);
        s1.log2(2);
        s2.log2(3);
    }
}

为了能看清楚是不是这样,我们吧 s1 s2 指向的地址在主方法中打印出来,发现和方法中的 this 打印出来的地址一样

这就说明了,确实是将对象给传了进去。

冉冉:啊,我懂了,我知道了,原来是这样啊,真神奇。我...我...

我:你怎么了,还有什么不懂得吗?

冉冉: 区分变量我总是记不住到底指向的是谁....

我:这个啊,简单,你记住就远原则 "this." 这个this打点调用的是谁,谁就是成员变量。如果你的变量出现了同名的情况,如果不进行指向,默认就是使用你的局部变量。

老师:你们俩嘀咕什么呢?都嘀咕半节课了,有什么好玩的事情,分享出来,我们大家一起开心嘛!

总结:

由于我个人觉得,如果只是枯燥的堆叠概念,只讲述一些术语,不仅看起来无聊,看过之后还会忘得一干二净。所以笔记用这种方法展示出来,可能更能让人记忆更深刻。学习本来没有固定的方法,不管怎么学,学会了就行嘛!

作者:一条不会写作的码农

原文链接:https://blog.csdn.net/weixin_44231805/article/details/109184166

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 "小贱贱"韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...