2012-07-11 32 views
1

官方的Jasmin HelloWorld例子已經開始。爲什麼在Jasmin HelloWorld中使用aload_0?

.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指令?本地var 0包含什麼?

回答

3

它調用一個基類的(在這種情況下Object)構造:

this.super(); 

在非靜態方法下指數0本地變量始終是this參考所以aload_0推在頂部this參考參考堆棧。然後invokenonvirtual調用堆棧頂部的一個對象(this)上的指定方法(Object/<init>())。

相關問題