Java之this关键字详解

this关键字

在类中的普通成员方法中,可以使用this关键字,其表示调用当前方法的对象引用,即哪个对象调用该方法,this就代表哪一个对象。

this关键字用法:

  • 对成员变量和局部变量进行区分

    固定格式:this.数据成员;

  • 调用类中的成员方法

    固定格式:this.成员方法(实际参数列表);

  • 调用类中的其他构造器(后面章节补充)

成员变量与局部变量的区分:

方法的形参如果与成员变量同名

  • 不带this修饰的变量指的是形参
  • 如果要表示成员变量,则必须加this修饰

方法的形参与成员变量不同名

  • 则不带this修饰的变量指的就是成员变量

案例展示:

​ 重新实现Account类,要求使用this关键字,要求成员方法中形式参数名跟类数据成员名相同。

基础类Account:
在这里插入图片描述

package com.briup.chap05.bean;

public class Account {
	private String id;		//卡号
	private double balance;	//金额
	
	public void setId(String id) {
		//方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
		//如果要表示成员变量,则必须加this修饰
		System.out.println("参数id: " + id);
		System.out.println("this.id: " + this.id);
		
		this.id = id;
	}
	
	public String getId() {
        //如果形参没有与成员变量同名,不带this修饰的变量指的是成员变量
        return id;
        //return this.id;
	}
	
	public void setBalance(double balance) {
		this.balance = balance;
	}
	
	public double getBalance() {
		return balance;
	}
	
	public void show() {
		System.out.println("id: " + this.id);
        
        //使用this去调用普通成员方法
		System.out.println("balance: " + this.getBalance());
	}
}

测试类:

package com.briup.chap05.test;

import com.briup.chap05.bean.Account;

public class Test08_This {
	public static void main(String[] args) {
		//1.实例化对象
		Account acc = new Account();
		
		//2.借助set方法赋值
		acc.setId("001");
		acc.setBalance(2300.5);

		System.out.println("---------------------");
		
		acc.show();
	}
}

运行效果:
在这里插入图片描述

测试代码较为简单,注意观察注释描述。

this内存构成理解:

public static void main(String[] args) {
	Student stu1 = new Student("zs",21);
    stu1.sayHello();
    
    Student stu2 = new Student("tom",19);
    stu2.sayHello();
}
  • 单个对象内存图
    在这里插入图片描述

  • 多个对象内存图
    在这里插入图片描述

观察上图可知:每一个对象中,都有自己的this,和其他对象中的互不影响。

当前执行stu1.sayHello()代码的时候,this代表的就是stu1

当前执行stu2.sayHello()代码的时候,this代表的就是stu2

结论:成员方法被哪个对象调用,方法中的this就代表那个对象,即谁调用,this就代表谁。

思考:在生活中, 我们每一个人心中的this,指的是哪一个汉字?

this补充

this特殊用法:

​ 在构造方法中,可以借助this关键字调用其他构造方法。

​ 具体格式为:this(实际参数列表);

案例展示:

基础类补充:

package com.briup.chap05.bean;

public class Teacher {
	//省略...
	
	//该类已经成功定义2参构造器,定义过程省略...
	//public Teacher(String name, double salary);
 
    //this特殊用法:在构造方法中,调用其他构造方法
    public Teacher(String name) {
        //必须是构造方法的第一行有效代码
        this(name,0);
    }
}   

测试类代码:

package com.briup.chap05.test;

import com.briup.chap05.bean.Teacher;

public class Test10_This {
	public static void main(String[] args) {
		//调用Teacher(String)构造方法实例化对象
        //底层借助Teacher(String, double)实现
		Teacher t = new Teacher("larry");
		t.show();
	}
}

运行效果:
在这里插入图片描述

观察上图可知,构造方法Teacher(String)底层借助Teacher(String, double)实现了功能。

注意:this(实际参数列表)必须是构造方法中的第一行有效代码。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值