javap -c

javap是sun提供的對class文件進行反編譯的工具,javap就和javac、java等命令用法類似。?

javap最常用的參數(shù)是c,也就是javap -c test 其中,test是test.java文件經(jīng)javac編譯后產(chǎn)生的class文件名一個例子


public class TestJavap {

? ? ? ? public static void main(String[] args) {

? ? ? ? ? ? ? ? int i=0;

? ? ? ? ? ? ? ? i = i++ + ++i;

? ? ? ? ? ? ? ? System.out.println(i);

? ? ? ? }

}


$ javac TestJavap.java

$ javap -c TestJavap

Compiled from "TestJavap.java"

public class TestJavap extends java.lang.Object{

public TestJavap();

? Code:

? 0:? aload_0

? 1:? invokespecial? #1; //Method java/lang/Object."<init>":()V

? 4:? return

public static void main(java.lang.String[]);

? Code:

? 0:? iconst_0

? 1:? istore_1

? 2:? iload_1

? 3:? iinc? ? 1, 1

? 6:? iinc? ? 1, 1

? 9:? iload_1

? 10:? iadd

? 11:? istore_1

? 12:? getstatic? ? ? #2; //Field java/lang/System.out:Ljava/io/PrintStream;

? 15:? iload_1

? 16:? invokevirtual? #3; //Method java/io/PrintStream.println:(I)V

? 19:? return

解釋如下

?? ?int i = 0;

?? ?i=i++ + ++i;

?? ?Code:

?? ?0:?? iconst_0? ? ? ? 將 0 推到堆棧中//對應(yīng)賦值語句 int i = 0;iconst_0中的0為初始值

?? ?1:?? istore_1? ? ? ? 從堆棧中彈出這個值,并將它存儲到局部變量表的索引 1 處 。對應(yīng)賦值語句,上句是賦值,這句是存儲,索引1處即為i,因為沒有其它變量,所以本例中局部變量的索引不變

?? ?2:?? iload_1? ? ? ? ?將局部變量表索引 1 處的值推到堆棧中。將局部變量索引1處的計算結(jié)果推入堆棧臨時存儲,局部變量的索引從1開始,依此類推,這句意味著將變量i=0先推入堆棧臨時存儲

?? ?3:?? iinc??? 1, 1?????? 局部變量表索引 1 處的變量加 1 。將變量i自加1,則此時變量i為1

?? ?6:?? iinc??? 1, 1?????? 局部變量表索引 1 處的變量加 1 。再將變量i自加1,則此時變量i為2

?? ?9:?? iload_1?????????? 將局部變量表索引 1 處的值推到堆棧中。將變量i=2推入堆棧臨時存儲

?? ?10:? iadd?????????????? 從操作數(shù)堆棧中彈出兩個整數(shù)并讓它們相加。將得到的整數(shù)推回堆棧中//將兩次暫存的整數(shù)相加,即0+2=2

?? ?11:? istore_1??????? 從堆棧中彈出這個值,并將它存儲到局部變量表的索引 1 處。把上步相加之結(jié)果彈出堆棧

?? ?12:? getstatic?????? #2; //Field java/lang/System.out:Ljava/io/PrintStream;? 對應(yīng)System.out

??? 15:? iload_1?? ??? ??? ?加載i//將變量i=2推入堆棧臨時存儲

??? 16:? invokevirtual?? #3; //Method java/io/PrintStream.println:(I)V?? ??? ??? ?對應(yīng)println?? ??? ??? ?

?? ?19:? return???????????? 退出方法



---------------------

作者:csdn

來源:CSDN

原文:https://blog.csdn.net/shangpusp/article/details/7320333?utm_source=copy

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java byte code 的學(xué)習(xí)意義 為啥要學(xué)java bytecode,這就跟你問我已經(jīng)會python了為...
    shanggl閱讀 1,864評論 0 3
  • 棧和局部變量操作將常量壓入棧的指令aconst_null 將null對象引用壓入棧iconst_m...
    小陳阿飛閱讀 421評論 0 0
  • 回想三個月的進化過程,不能說是脫胎換骨,但也是三十幾年下來人生重新接受了一次洗禮,認(rèn)知系統(tǒng)的升級。也終于明白了以前...
    輝靈有道閱讀 415評論 0 1
  • 記丁酉年元宵夜雨 飛燈傳語悠悠去, 云女聞息款款來。 由是月池生玉浪? 中庭人靜雨花開。 話緣 塵緣前世定, 經(jīng)歲...
    方好亦奇閱讀 581評論 0 3
  • 【接龍客?!繎屹p任務(wù)十一月榜單 【3】不說話,就很美了 五月,下旬。 依靠在三樓的欄桿。 路燈薄光, 映的你和在旁...
    寧若林閱讀 330評論 5 3

友情鏈接更多精彩內(nèi)容