This关键字+类加载机制

This 关键字

1、作用:

是一个关键字(指代词),代替一个对象(当前调用属性或方法时的那个对象),不一定是当前类。代替的是调用方法的那个类。

2、this可以调用属性、方法;this可以在一个构造方法内调用另一个构造方法,通过this()的方式,省略了调用的构造函数的函数名,但必须在构造函数第一行

3、this调用的过程可以放置在类中的任何一个成员位置

 

类(对象)加载机制

  创建对象

Person p = new Person();

 

当我们在创建对象时,首先会在存储区加载一个该对象所属类的模板,如果该类继承了一个父类,则同时也会加载这个父类的模板。

在new Person()时,会在堆内存中开辟一个Person空间,在其中加载Person类所含有的成员,如果Person类有父类的话,还会在这个Person空间中再分出一块地方开辟父类空间,在其中加载父类的成员。

当所有的成员都加载完成后,会将new Person()所开辟出空间的地址引用赋给 栈内存中的Person 类型变量 p。

 

调用方法:

p.eat();

当我们调用这个对象中的方法时,会先在栈内存中开辟一个临时的执行空间,用来加载这个对象。然后该对象会去堆内存的对象空间中寻找所调用的这个方法。

1、eat()方法为父类方法,且在子类Person类中未重写

      p拿着地址引用去堆内存中寻找eat()方法,发现Person类中没有这个方法,则会继续前往Person类的父类中寻找这个方法

2、eat()方法为Person特有或eat()方法是Person类重写的父类方法

       p拿着地址,在堆内存中找到Person类,在Person类中找到了eat()方法,就将该方法带回,不再继续寻找。

 

This关键字调用方法时的影响

         假设当前的父子类中都有eat()方法,输出一句“我是父/子类中的eat方法”,之后在各自的构造函数中通过this.eat()方式,调用这个方法。

   

 

最后的输出结果如图所示:

 

因为this关键字所代表的的是当前调用对象而不是当前类,所以在程序执行时,实际上父类Animal中的this代表的是Person对象,自然调用的也是Person类中的eat方法。用类的加载来说的话就是,当父类中得到this到堆内存中寻找eat()方法时,首先在Person 类中发现了这个方法,就直接取走这个方法执行,不再找下去。

 

所以,在使用this关键字时需要多加注意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值