为什么在Jasmin HelloWorld中使用aload_0?

时间:2012-07-11 21:14:43

标签: java jasmin

官方Jasmin HelloWorld示例的开始。

.class public NoJad.j
.super java/lang/Object

.method public <init>()V
   aload_0

   invokenonvirtual java/lang/Object/<init>()V
   return
.end method

.method public static main([Ljava/lang/String;)V
   .limit stack 2
...

为什么有aload_0指令? local var 0包含什么?

1 个答案:

答案 0 :(得分:3)

它正在调用基类的构造函数(在这种情况下为Object):

this.super();

在非静态方法中,索引0下的局部变量始终为this引用,因此aload_0会在参考堆栈的顶部推送this引用。然后invokenonvirtual在堆栈顶部的对象(Object/<init>())上调用指定的方法(this)。