Java

javap -c

2018-10-18  本文已影响0人  rabbit_coding

javap是sun提供的对class文件进行反编译的工具,javap就和javac、java等命令用法类似。 

javap最常用的参数是c,也就是javap -c test 其中,test是test.java文件经javac编译后产生的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 推到堆栈中//对应赋值语句 int i = 0;iconst_0中的0为初始值

    1:   istore_1        从堆栈中弹出这个值,并将它存储到局部变量表的索引 1 处 。对应赋值语句,上句是赋值,这句是存储,索引1处即为i,因为没有其它变量,所以本例中局部变量的索引不变

    2:   iload_1         将局部变量表索引 1 处的值推到堆栈中。将局部变量索引1处的计算结果推入堆栈临时存储,局部变量的索引从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               从操作数堆栈中弹出两个整数并让它们相加。将得到的整数推回堆栈中//将两次暂存的整数相加,即0+2=2

    11:  istore_1        从堆栈中弹出这个值,并将它存储到局部变量表的索引 1 处。把上步相加之结果弹出堆栈

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

    15:  iload_1            加载i//将变量i=2推入堆栈临时存储

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

    19:  return             退出方法

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

作者:csdn

来源:CSDN

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

版权声明:本文为博主原创文章,转载请附上博文链接!

上一篇下一篇

猜你喜欢

热点阅读