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)載請附上博文鏈接!