博主简介:努力学习的预备程序媛一枚~博主主页: @是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言 问题:为什么会存在this? 在上一篇【JavaSE】一文看懂构造器/构造方法(Cunstructor)中,我们已
- 博主简介:努力学习的预备程序媛一枚~
- 博主主页: @是瑶瑶子啦
- 所属专栏: Java岛冒险记【从小白到大佬之路】
问题:为什么会存在this?
在上一篇【JavaSE】一文看懂构造器/构造方法(Cunstructor)中,我们已经在构造器中初步窥得this关键字的冰山一角了。大家有没有考虑过,在一个类的构造器中,我们为什么要使用this.属性
而不直接使用属性
呢?毕竟一个类中,不管属性被什么关键字修饰,在类中都可以访问。随着这个问题,今天瑶瑶子带大家深入分析一下Java中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;}}
class Account { private String name; private double balance; private String pwd; //Account类的一个构造器 public Account(String name, double balance, String pwd) { //构造器的实现---初始化对象 //不用this name = 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(); }}
【运行结果】:
【解释】:
我们以为左边的变量是成员变量,但实际上,左边变量是局部变量!即,局部变量赋值给了局部变量,成员变量根本没变,依旧是默认值!
方法中的变量为局部变量,存储在栈中,作用范围是方法内;我们想通过构造器初始化的是成员变量,存储在堆中,作用范围是本类内部。
当成员变量&局部变量重名时,优先使用局部变量。关键还是看有没有局部变量,有局部变量优先使用局部变量,否则属性—就近原则!
通过上面的分析,我们发现,当局部变量&属性同名时,在构造器中无法对属性初始化成功。我们在想,如果能被赋值的变量,不是构造器中的局部变量,而是成员变量这个问题不就解决了嘛?对的,所以就有了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.属性
来表明这是一个成员变量,与局部变量以示区分.
看到这句话真的就很烦,好像是这么回事对吧。但又感觉说的不是很通俗。瑶瑶子来说人话!
说人话解释:
new
一个新对象的时候,会在堆内存为对象分配空间,属性就储存在这份空间中。且该this属性的值就是对象在堆内存中地址,即this指向该对象(this代表该对象).【重点】综上:this是对象的隐藏属性(本质就是一个普通的成员变量),和其他non-static
属性一样,在创建对象的时候会为每个新对象分配该对象的专属成员变量(this就是其中一个),this这个成员变量存储在堆内存中,该变量的值是所属对象在堆内存的地址。
即:创建1000个对象,就有1000个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–包
专栏系列文章:
原创不易,如果对你有所帮助,还请三连+关注!我是瑶瑶子,持续输出优质文章!
来源地址:https://blog.csdn.net/Yaoyao2024/article/details/128753927
--结束END--
本文标题: 【Java】还不懂this关键字?一分钟彻底弄懂this关键字
本文链接: https://lsjlt.com/news/375161.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0