• jdk中bin目录详解


    前言

    jdk 版本 jdk1.8.0_201

    编译是将java文件变为class文件,反编译是将class文件还原成java文件

    javap - disassemble one or more class files , disassemble 反汇编

    一些官方的参考文档

    Java Platform, Standard Edition Documentation

    https://docs.oracle.com/javase/8/

    Java 语言和虚拟机规范

    Java ®开发工具包第 17 版工具规范

    javac

    在这里插入图片描述

    javac -g + class

    在这里插入图片描述

    javac + class

    javac 任意 .java文件后生成 对应的 class 文件
    在这里插入图片描述

    javap

    在这里插入图片描述

    javap + class

    在这里插入图片描述

    javap -c + class 对代码进行反汇编

    在这里插入图片描述

    javap -l + class 输出行号和本地变量表

    参数为英语字母 L 不是 1 。

    在这里插入图片描述

    javap -v + class 输出附加信息

    D:\ideaProject\microservices\common\src\main\java\com\example\common\basic>javap -v AutoIncrement.class
    Classfile /D:/ideaProject/microservices/common/src/main/java/com/example/common/basic/AutoIncrement.class
      Last modified 2022-8-22; size 637 bytes
      MD5 checksum b38b74575c0f592187174134bd6f4cfd
      Compiled from "AutoIncrement.java"
    public class com.example.common.basic.AutoIncrement
      minor version: 0
      major version: 52
      flags: ACC_PUBLIC, ACC_SUPER
    Constant pool:
       #1 = Methodref          #5.#21         // java/lang/Object."":()V
       #2 = Fieldref           #22.#23        // java/lang/System.out:Ljava/io/PrintStream;
       #3 = Methodref          #24.#25        // java/io/PrintStream.println:(I)V
       #4 = Class              #26            // com/example/common/basic/AutoIncrement
       #5 = Class              #27            // java/lang/Object
       #6 = Utf8               <init>
       #7 = Utf8               ()V
       #8 = Utf8               Code
       #9 = Utf8               LineNumberTable
      #10 = Utf8               LocalVariableTable
      #11 = Utf8               this
      #12 = Utf8               Lcom/example/common/basic/AutoIncrement;
      #13 = Utf8               main
      #14 = Utf8               ([Ljava/lang/String;)V
      #15 = Utf8               args
      #16 = Utf8               [Ljava/lang/String;
      #17 = Utf8               a
      #18 = Utf8               I
      #19 = Utf8               SourceFile
      #20 = Utf8               AutoIncrement.java
      #21 = NameAndType        #6:#7          // "":()V
      #22 = Class              #28            // java/lang/System
      #23 = NameAndType        #29:#30        // out:Ljava/io/PrintStream;
      #24 = Class              #31            // java/io/PrintStream
      #25 = NameAndType        #32:#33        // println:(I)V
      #26 = Utf8               com/example/common/basic/AutoIncrement
      #27 = Utf8               java/lang/Object
      #28 = Utf8               java/lang/System
      #29 = Utf8               out
      #30 = Utf8               Ljava/io/PrintStream;
      #31 = Utf8               java/io/PrintStream
      #32 = Utf8               println
      #33 = Utf8               (I)V
    {
      public com.example.common.basic.AutoIncrement();
        descriptor: ()V
        flags: ACC_PUBLIC
        Code:
          stack=1, locals=1, args_size=1
             0: aload_0
             1: invokespecial #1                  // Method java/lang/Object."":()V
             4: return
          LineNumberTable:
            line 9: 0
          LocalVariableTable:
            Start  Length  Slot  Name   Signature
                0       5     0  this   Lcom/example/common/basic/AutoIncrement;
    
      public static void main(java.lang.String[]);
        descriptor: ([Ljava/lang/String;)V
        flags: ACC_PUBLIC, ACC_STATIC
        Code:
          stack=2, locals=2, args_size=1
             0: iconst_1
             1: istore_1
             2: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
             5: iinc          1, -1
             8: iload_1
             9: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
            12: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
            15: iinc          1, 1
            18: iload_1
            19: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
            22: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
            25: iload_1
            26: iinc          1, -1
            29: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
            32: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
            35: iload_1
            36: iinc          1, 1
            39: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
            42: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
            45: iload_1
            46: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
            49: return
          LineNumberTable:
            line 11: 0
            line 12: 2
            line 13: 12
            line 14: 22
            line 15: 32
            line 16: 42
            line 17: 49
          LocalVariableTable:
            Start  Length  Slot  Name   Signature
                0      50     0  args   [Ljava/lang/String;
                2      48     1     a   I
    }
    SourceFile: "AutoIncrement.java"
    
    
    • 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
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100

    idea外部工具 + javap命令

    如何在idea中使用 javap 命令反汇编
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    说明: javap命令作用于class文件,需要在target目录下存在对应的class文件,否则会报错。
    在这里插入图片描述
    我们执行 maven clean 命令后看看效果
    在这里插入图片描述
    工作目录就是 class文件存放的目录 ,正确运行截图如下所示。

    在这里插入图片描述

    java

    在这里插入图片描述

    jar

    在这里插入图片描述

    javadoc

    在这里插入图片描述

    Notepad++

    https://notepad-plus-plus.org/

    Download Notepad++ for Windows

    下载插件

  • 相关阅读:
    C++数据传输
    领料确认用例
    HTML简单的网页制作期末作业【NBA勒布朗詹姆斯篮球明星】HTML+CSS+JavaScript
    54 循环神经网络 RNN【动手学深度学习v2】
    linux网络编程之System V 共享内存 和 系列函数
    从积木式到装配式云原生安全
    选择正确的 React 状态管理解决方案的指南
    delphi中常见错误提示说明总结
    算法训练营day17
    Linux vim的使用。
  • 原文地址:https://blog.csdn.net/qq_37151886/article/details/126456449