JavaSE---java命令---javap

1、javap

      1.1  javap是JDK自带的反解析工具;

      1.2  作用:就是根据class字节码文件,反解析出    当前类   对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息;

      1.3  常用的命令:

            javap -c   

              对当前class字节码进行反编译生成汇编代码

            javap -l

              会输出行号和本地变量表信息;

            javap -v 

              会输出行号、本地变量表信息、反编译汇编代码,还会输出当前类用到的常量池等信息;

      1.4  案例:

      

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package yunsuanfu;
 
public class Test {
 
    public static void main(String[] args){
        plusTest();
        plusTestTwo();
    }
 
    /**
     * a++:先参与运算(System.out.println(a))、再进行自增(a++  等效于a=a+1)
     * ++a:先自增(a++),再参与运算(System.out.println(a))
     *
     * 结果是:9、11
     */
    public static void plusTest(){
        int a=9;
        System.out.println(a++);
        System.out.println(++a);
    }
 
    /**
     * y+=z--/++x   等效于  y=y+z--/++x     y=2+3/2
     *
     * 结果是:3
     */
    public static void plusTestTwo(){
        int x=1,y=2,z=3;
        System.out.println(y+=z--/++x);
    }
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
javap -c Test.class
 
 
Compiled from "Test.java"
public class yunsuanfu.Test {
  public yunsuanfu.Test();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
 
  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #2                  // Method plusTest:()V
       3: invokestatic  #3                  // Method plusTestTwo:()V
       6: return
 
  public static void plusTest();
    Code:
       0: bipush        9
       2: istore_0
       3: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
       6: iload_0
       7: iinc          0, 1
      10: invokevirtual #5                  // Method java/io/PrintStream.println:(I)V
      13: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
      16: iinc          0, 1
      19: iload_0
      20: invokevirtual #5                  // Method java/io/PrintStream.println:(I)V
      23: return
 
  public static void plusTestTwo();
    Code:
       0: iconst_1
       1: istore_0
       2: iconst_2
       3: istore_1
       4: iconst_3
       5: istore_2
       6: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
       9: iload_1
      10: iload_2
      11: iinc          2, -1
      14: iinc          0, 1
      17: iload_0
      18: idiv
      19: iadd
      20: dup
      21: istore_1
      22: invokevirtual #5                  // Method java/io/PrintStream.println:(I)V
      25: return
}

  

posted on   anpeiyong  阅读(322)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示