【Java】还不懂this关键字?一分钟彻底弄懂this关键字
创始人
2024-05-20 07:24:20
0

在这里插入图片描述

  • 博主简介:努力学习的预备程序媛一枚~
  • 博主主页: @是瑶瑶子啦
  • 所属专栏: Java岛冒险记【从小白到大佬之路】

在这里插入图片描述

前言

问题:为什么会存在this?
在上一篇【JavaSE】一文看懂构造器/构造方法(Cunstructor)中,我们已经在构造器中初步窥得this关键字的冰山一角了。大家有没有考虑过,在一个类的构造器中,我们为什么要使用this.属性而不直接使用属性呢?毕竟一个类中,不管属性被什么关键字修饰,在类中都可以访问。随着这个问题,今天瑶瑶子带大家深入分析一下Java中this关键字,让大家彻底理解this关键字.


目录

  • 前言
  • Part1:构造器中的this
    • 1.1初识this:
    • 1.2:为何要this?
  • Part2:this介绍
    • 2.1:this到底是什么?
  • Part3:使用细节&注意事项

Part1:构造器中的this

1.1初识this:

public class Account {private String name;private double balance;private String pwd;//Account类的一个构造器public Account (String name,double balance,String pwd){//构造器的实现---初始化对象this.name = name;this.balance = balance;	this.pwd = pwd;}
}
  • 【思考】:不用this会怎么样?
class Account {private String name;private double balance;private String pwd;//Account类的一个构造器public Account(String name, double balance, String pwd) {//构造器的实现---初始化对象//不用thisname = name;balance = balance;pwd = pwd;}public void showInfo() {System.out.println("name:" + name + " " + "balance:" + balance + " " + "pwd:" + pwd);return;}
}public class Main {public static void main(String[] args) {Account account = new Account("Yaoyao", 20, "123456");account.showInfo();}
}
  • 【运行结果】:在这里插入图片描述

  • 【解释】:

    • 我们以为左边的变量是成员变量,但实际上,左边变量是局部变量!即,局部变量赋值给了局部变量,成员变量根本没变,依旧是默认值!
      在这里插入图片描述

    • 方法中的变量为局部变量,存储在中,作用范围是方法内;我们想通过构造器初始化的是成员变量,存储在中,作用范围是本类内部
      当成员变量&局部变量重名时,优先使用局部变量
      关键还是看有没有局部变量,有局部变量优先使用局部变量,否则属性—就近原则!

在这里插入图片描述

1.2:为何要this?

 通过上面的分析,我们发现,当局部变量&属性同名时,在构造器中无法对属性初始化成功。我们在想,如果能被赋值的变量,不是构造器中的局部变量,而是成员变量这个问题不就解决了嘛?对的,所以就有了this!!!

public class Account {private String name;private double balance;private String pwd;//Account类的一个构造器public Account (String name,double balance,String pwd){//构造器的实现---初始化对象this.name = name;this.balance = balance;	this.pwd = pwd;}
}

 这样,通过this.属性来表明这是一个成员变量,与局部变量以示区分.

Part2:this介绍

2.1:this到底是什么?

  • 比较官方的解释:

Java虚拟机(JVM)会给每个对象分配一个this,来代表当前对象,

  看到这句话真的就很烦,好像是这么回事对吧。但又感觉说的不是很通俗。瑶瑶子来说人话!

说人话解释:

  • this其实可以理解为对象的一个属性(成员变量),但是这个属性是隐藏的.即this相当于对象的一个隐藏属性。
  • 和对象的其他属性一样,在new一个新对象的时候,会在堆内存为对象分配空间,属性就储存在这份空间中。且该this属性的值就是对象在堆内存中地址,即this指向该对象(this代表该对象).

【重点】综上:this是对象的隐藏属性(本质就是一个普通的成员变量),和其他non-static属性一样,在创建对象的时候会为每个新对象分配该对象的专属成员变量(this就是其中一个),this这个成员变量存储在堆内存中,该变量的值是所属对象在堆内存的地址。

即:创建1000个对象,就有1000个this,它们之间相互独立(哎呀,this就是普通的成员变量而已啦!)

  • 【图解】:
    在这里插入图片描述

Part3:使用细节&注意事项

  • this关键字可以用来区分当前类的属性&局部变量。
  • 使用this关键字可以用来访问本类的实例属性、实例方法、构造器(“实例”指的就是non-static修饰 的)
    • 访问本类实例属性:this.属性
    • 访问本类实例方法:this.方法名(参数列表)
    • 访问本类构造器:this(参数列表)
  • 【注意】:this(参数列表)来访问本类构造器需要注意以下几点
    • 只能在构造器中使用this(参数列表);即在一个构造器中访问本类的另外一个构造器。(默认构造器行首是super();,)。
    • 显示使用this()时,默认的super()就被覆盖
    • this(参数列表)super(参数列表)在构造器中有且只能存在一个。
    • 若在构造器中使用this(参数列表),则此语句只能位于构造器第一行
    • 类中的静态方法static method不能使用this很简单理解:static方法中不能出现成员变量(this依赖对象,而static不依赖于对象,类名.静态方法时,没有对象啊,你让this情何以堪!它都不知道自己属于哪个对象!)在【JavaSE】保姆级教程|1万字+10张图学会类与对象–建议收藏这篇博文的Part4、Part5部分关于成员方法和静态方法已经做出详细解释
//错误代码:
public class Account {private String name;private double balance;private String pwd;public static void show(){System.out.print(name);//编译出错:实例变量依赖于对象System.out.print(this.name);//编译出错,this.name依赖对象}
}
  • 一个笨笨的解决方法哈哈:既然需要对象,那我就new一个呗哈哈,这样实例变量、方法都有所归属啦~
public class Account {private String name;private double balance;private String pwd;public static void show(){Account account = new Account();//创建对象System.out.print(account.name);}
}

下期预告–详细讲解Java–包
专栏系列文章:

  • 【JavaSE】一文看懂构造器/构造方法(Cunstructor)
  • 【JavaSE】保姆级教程|1万字+10张图学会类与对象–建议收藏
  • 【JavaSE】多图解,保姆级详细讲解数组、二维数组–建议收藏

原创不易,如果对你有所帮助,还请三连+关注!我是瑶瑶子,持续输出优质文章!

在这里插入图片描述

相关内容

热门资讯

校园励志的歌曲100首推荐   歌曲是由歌词和曲谱相结合的艺术形式,也是一种表现形式词曲一一相应。下面是小编为你带来的校园励志歌...
电视剧楚乔传什么时候播出   电视剧楚乔传什么时候播出?大家是不很期待呢?以下是励志网分享的电视剧楚乔传的相关内容,希望大家喜...
关于企业文化励志文章精选3篇   马云说:没有吃亏的员工,只有吃亏的老板。老板亏待员工,员工亏待客户,客户亏待老板!就是这样一个简...
个人励志成长故事 个人励志成长故事(通用21篇)  励志故事就像一幅画卷,把干瘪的道理加以润色,有时浓墨重彩,有时淡若...
关于行动的励志名言   1. 笑实在是仁爱的象征,快乐的源泉,亲近别人的媒介。有了笑,人类的感情就沟通了。——雪莱  2...
励志电影推荐《胜利大逃亡》   1981年版本的《胜利大逃亡》描写了一群在德国集中营的盟军士兵为逃跑,而策划了一次足球比赛的故事...
精选中国励志电影排行榜   1、女篮五号  导演:谢晋  类型: 励志  主演:刘琼,秦怡,曹其纬  影片剧情  解放前,上...
改变一生的励志名言警句 改变一生的励志名言警句(通用120句)  在平凡的学习、工作、生活中,大家都不可避免地会接触并使用名...
开心就好的励志句子精选287... 开心就好的励志句子 精选124句1. 快乐就和幸福一样,简单地存在于我们生活的点点滴滴里,不过她需要...
励志拼搏努力的作文范文推荐5... 励志拼搏努力的作文范文 第一篇1. 事业无需惊天动地,有成就行;情意无需甜言蜜语,真诚就行;金钱无需...
经典名言名句阅读_励志读书名... 导语:本文既有古人之名言,又有今人之隽语。小编在这里,希望此文能带给大家帮助。经典名言名句阅读_励志...
生活中爱埋怨的诉说者励志文章 生活中爱埋怨的诉说者励志文章  不要说人生中的你有多么的不如意,也不要说你的人生有多么的不高兴,就两...
生活定义的励志语句 关于生活定义的励志语句  导语:一个人什么都可以开玩笑,但不可以和自己得未来开玩笑。以下是小编整理关...
关于树叶的励志句子精选574... 关于树叶的励志句子 精选74句1. 关于植物的诗歌在乡间那些小小的五色的花朵2. 郁郁涧底松,离离山...
励志故事:宽容是金 励志故事:宽容是金 励志感悟:这是真人真事,励志故事:宽容是金。在那次比赛中,涅莫夫虽然没有拿到金牌...
姜子牙封神的故事   姜子牙,姜尚,古典名著《《封神演义》人物、字子牙,别号飞熊,乃是阐教昆仑山玉虚宫,元始天尊门下。...
职场励志小故事:生命的养料 职场励志小故事:生命的养料  一个小男孩几乎认为自己是世界上最不幸的孩子,因为患脊髓灰质炎而留下了瘸...
男人拼搏励志的句子精选314... 男人拼搏励志的句子 精选98句1. 不要逃避,不要躲藏,勇敢的面对残酷的真相是你通往幸福的必经之路,...
励志人生校园公益讲座 励志人生校园公益讲座  20xx年的春天似乎很短,学生们的学习计划都还没有来得及制定,一场以励志人生...
关于工作励志座右铭   关于工作的励志座右铭  1、伟大的事业不是靠力气、速度和身体的敏捷完成的,而是靠性格、意志和知识...