面向对象之This关键字

方法之间调用时,可以通过方法名进行调用。可是针对构造方法,无法通过构造方法名来相互调用。

构造方法之间的调用,可以通过this关键字来完成。

构造方法调用格式:

this(参数列表);

 

 构造方法的调用

class Person {

// Person的成员属性

private int age;

private String name;

 

// 无参数的构造方法

Person() {

}

 

// 给姓名初始化的构造方法

Person(String name) {

this.name = name;

}

 

// 给姓名和年龄初始化的构造方法

Person(String name, int age) {

// 由于已经存在给姓名进行初始化的构造方法 this.name = name;因此只需要调用即可

// 调用其他构造方法,需要通过this关键字来调用

this(name);

// 给年龄初始化

this.age = age;

}

}


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

当在方法中出现了局部变量和成员变量同名的时候,那么在方法中怎么区别局部变量成员变量呢?

可以在成员变量名前面加上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的原理

class Person {

private int age;

private String name;

 

Person() {

}

Person(String nm) {

name = nm;

}

Person(String nm, int a) {

this(nm);

age = a;

}

}

 

class PersonDemo {

public static void main(String[] args) {

Person p = new Person("张三", 23);

}

}





l 图列说明:

1、先执行main方法,main方法压栈,执行其中的new Person(“张三”,23);

2、堆内存中开辟空间,并为其分配内存地址0x33,,紧接着成员变量默认初始化(name=null  age = 0);

3、拥有两个参数的构造方法(PersonString nm , int a))压栈,在这个构造方法中有一个隐式的this,因为构造方法是给对象初始化的,那个对象调用到这个构造方法,this就指向堆中的那个对象。

4、由于PersonString nm , int a)构造方法中使用了this(nm);构造方法Person(String nm)就会压栈,并将“张三”传递给nm。在PersonString nm , int a)构造方法中同样也有隐式的thisthis的值同样也为0x33,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后PersonString nm , int a)构造方法弹栈。

5、程序继续执行构造方法(PersonString nm , int a)中的age = a;这时会将23赋值给成员属性age。赋值结束构造方法(PersonString nm , int a)弹栈。

6、当构造方法(PersonString nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值给main方法中的p引用变量。

l 注意:

this到底代表什么呢?this代表的是对象,具体代表哪个对象呢?哪个对象调用了this所在的方法,this就代表哪个对象。

调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化动作要最先执行。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值