黑马程序员技术交流社区
标题:
对this的深入探索 在jvm层的运行原理
[打印本页]
作者:
许佳鑫
时间:
2015-11-14 21:43
标题:
对this的深入探索 在jvm层的运行原理
我们都知道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
(特别说明:本文完全转自网络,我只是扮演引荐者的角色,网友的真知灼见令我折服,和坛友们分享下)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2