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

在这里插入图片描述

在这里插入图片描述

前言

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


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) {
        //构造器的实现---初始化对象
        //不用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();
    }
}

在这里插入图片描述

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是对象的隐藏属性(本质就是一个普通的成员变量),和其他non-static属性一样,在创建对象的时候会为每个新对象分配该对象的专属成员变量(this就是其中一个),this这个成员变量存储在堆内存中,该变量的值是所属对象在堆内存地址

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

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

Part3:使用细节&注意事项

//错误代码
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依赖对象
	}
}
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11115.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注