this关键字解析和说明

刚讲了构造函数,下来说说构造函数的调用,用this

this调用构造函数

构造函数之间的调用

class Person 
{
	// Person的成员属性
	private int age;
	private String name;
	//无参数的构造函数
	Person()
	{
	}
	//给姓名初始化的构造函数
	Person(String nm)
	{
		name = nm;
	}
	//给姓名和年龄初始化的构造函数
	Person(String nm , int a)
	{
		//由于已经存在给姓名进行初始化的构造函数 name = nm;因此只需要调用即可
		//调用其他构造函数,需要通过this关键字来调用
		this(nm);
		//给年龄初始化
		age = a;
	}
}
构造函数调用格式:

this(参数列表);

this关键字和构造函数

class Person 
{
	private int age;
	private String name;
	Person()
	{
	}
	Person(String nm)
	{
        // this -- 指向当前对象
		name = nm;
	}
	Person(String nm , int a)
	{
        // this -- 指向当前对象
		this(nm);// 等效于Person(nm)
		age = a;
	}
}
class PersonDemo
{
	public static void main(String[] args)
	{
		Person p = new Person("张三",23);
	}
}
// 创建对象时看的是new关键字,有new有对象
// 构造方法只是进一步完成初始化属性的。真正创建对象是 new + 构造

原理说明:

  1. 先执行main方法,main方法压栈,执行其中的new Person(“张三”,23);
  2. 堆内存中开辟空间,并为其分配内存地址0x33,紧接着成员变量默认初始化(name=null age = 0);
  3. 拥有两个参数的构造函数(Person(String nm , int a))压栈,在这个构造函数中有一个隐式的this,因为构造函数是给对象初始化的,那个对象调用到这个构造函数,this就指向堆中的那个构造函数。
  4. 由于Person(String nm , int a)构造函数中使用了this(nm);构造函数Person(String nm)就会压栈,并将“张三”传递给nm。在Person(String nm )构造函数中同样也有隐式的this,this的值同样也为0x33,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后Person(String nm )构造函数弹栈。
  5. 程序继续执行构造函数(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。赋值结束构造函数(Person(String nm , int a)弹栈。
  6. 当构造函数Person(String nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值给main方法中的p引用变量。
    注意
this到底代表什么呢?this代表的是对象,具体代表哪个对象呢?哪个对象调用了this所在的函数,this就代表哪个对象。
调用其他构造函数的语句必须定义在构造函数的第一行,原因是初始化动作要最先执行。

成员变量和局部变量同名问题

class Person 
{
	private int age;
	private String name;
	//给姓名和年龄初始化的构造函数
	Person(String name , int age)
	{
		//当需要访问成员变量是,只需要在成员变量前面加上this.即可
		this.name = name;
		this.age = age;
	}
	public void speak()
	{
		System.out.println("name="+this.name+",age="+this.age);
	}
}
class PersonDemo
{
	public static void main(String[] args)
	{
		Person p = new Person("张三",23);
		p.speak();
	}
}

当局部变量和成员变量同名的时候,我们可以用this.的形式去区分成员变量和局部变量
this的使用:

this.属性  this() this.方法()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值