A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们都知道this是代表正在调用这个类的方法的当前实例,了解到了这个层次已经可以让我们很好的运行this了
,但当我们碰到更尖锐的问题时,就不得不更深入的探究其在jvm层的原理了。一位java老师经常跟我们讲,知道原理才能灵活起来
。当然了解原理的过程是探索的过程,本身就是一件很有趣的事。
  1. public static void main(String[] args) {
  2.     Leaf x = new Leaf();
  3.     x.increment().increment().print();
  4.          
  5.     Leaf y = new Leaf();
  6.     y.increment().increment().print();
  7. }
复制代码
假如 x,y同时调用的increment()方法,那么this到底能代表谁呢?你可能会觉得这有什么问题,x调用increment()方法,this就代表xy调用increment()方法,this就代表y。可问题是,当我们讲调用方法的时候,在jvm层面上是找到Leaf类中increment()方法所在的内存地址,然后在java虚拟机栈中创建栈帧,然后在栈帧中执行方法里面的代码。现在看到了吧,也就是说,在jvm执行方法层面,没有所谓的x调用,y调用了,那么,方法中的this到底是怎么确定指向哪个实例的呢?
有兴趣的童鞋可以看看详细探索过程:
http://my.oschina.net/kalo/blog/333202




(特别说明:本文完全转自网络,我只是扮演引荐者的角色,网友的真知灼见令我折服,和坛友们分享下)




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马