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