Java 关键字 --- this

本文围绕Java中this关键字展开。介绍了this出现的原因,即方法中变量名与实例变量名相同时用于区分。阐述了其两个主要作用,一是区分参数变量和实例变量,二是在构造函数中调用其他构造函数,还提及了this的应用,如判断是否为同龄人。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


this 代表本类对象的 引用 (地址)

  • 区分 参数变量实例变量
  • 在构造函数中 调用 其他构造函数

1 this出现的原因

当方法中参数的变量名实例变量的变量名 相同时,则需要使用 this.变量名 来表示实例变量。

class Person{
  Person(String name)	
	{
		name = name; // 这就是 局部变量和成员变量 重名了
		// 一个在栈中,一个在堆中,互不影响,本来没问题,但是,
		// 在使用的时候,出问题,所以要做一个区分,出现了 this
	}
}

class ThisDemo 
{
	public static void main(String[] args) 
	{

		Person p1 = new Person("aa");// 输出结果是 null,为什么
	}		
}

new Person(“aa”); — 去找函数Person(String name),而 Person(String name) 有自己的 name,Person(String name) 在栈区,不在堆区,它有自己的名字,就不再使用堆区的名字了。

2 this的作用1:区分参数变量和实例变量

this 代表 所在函数 所属对象的 引用

Person p = new Person("aa");
p.speak();

再次分析 new Person(“aa”); 上次分析见 Java基础 — 构造函数
首先进行两次初始化,默认初始化和构造函数初始化。
在构造函数进行初始化的时候,由于一个类可能会产生很多对象,要给谁进行初始化,在 Java 中,用 this 来表示。
this持有对象的引用 ,谁调用 this,this 就指向谁,初始化完成,该构造函数弹栈,把地址赋给 p.speak() 中的 p。
p.speak(); speak(); 进栈,进栈后,用来说出某个对象的姓名和年龄,哪个对象,不知道。

其实,speak() 进内存的时候,也有一个 this,this 引用对象的地址,speak()指向 this所引用的对象。
System.out.println(name+":"+age);
其实,这句话,应该是:
System.out.println(this.name+":"+this.age);

注:一个类中的成员,除了静态的,如果想运行,都必须由对象调用,随便定义一个方法 method();
其实是 this.method(); ,只是省略了 this

3 this的作用2:在构造函数中调用其他构造函数

构造函数的区分,是通过 参数列表 来完成的。
this 可以用于 在构造函数中 调用其他构造函数。
注:只能定义在 构造函数的第一行,因为 初始化动作要先执行

说明:见代码

 Person(String name)	
	{
		this.name = name;
	}
	Person(String name,int age)
	{
		this.name = name;  // 在上面写了 this.name = name;下面接着写,有点重复了,怎么办? 直接写 this(name);
		this.age = age;		
	}

	Person()
	{		
		name = "baby";
		age = 1;
		System.out.println("person run");
	}	
	Person(String name)	
	{
		this(); --- 能不能用 this 调用上面的构造函数,可以。直接 this()就可以了,因为上面的构造函数,是无参构造函数
		this.name = name;
	}

4 应用

// 判断是否是同龄人

写函数之前的思考:
比较的是年龄,按理说传的参数应该是 age,但是 Java 是面向对象的语言,我们应该用 面向对象的思想 来思考,
所以,传入的 应该是 Person,Person里封装了 age.
public boolean compare(Person p ){
   /*
   调用这个方法的对象,和 传入这个方法的对象,两个对象相比,
   传入这个方法的对象是 p, 所以可以用 p.age 来表示,调用这个方法的对象,用 this.age 来表示
   */
   
    /*
    if(this.age == p.age)
        return true;
    else
        return false;
    */
    return this.age == p.age;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值