JDK自带的反编译工具 javap

本文介绍了JDK自带的反编译工具javap,它可以将class文件反编译为字节码,虽然不直接转换为Java源代码,但输出的内容对程序员来说仍然可读。通过示例展示了如何使用javap的不同选项,如-p, -v和-c,来查看类的详细信息、私有字段和方法以及方法对应的字节码。对于字符串拼接的字节码操作进行了简要分析,强调了字节码指令在程序优化中的作用。最后指出,这只是javap和字节码知识的初步探索,还有更多内容值得深入研究。" 132705298,19694543,使用Python进行交叉验证与绘制综合ROC曲线,"['Python', '机器学习', '模型评估', '数据处理']
摘要由CSDN通过智能技术生成

前言

以前经常看一些文章使用 javac 反编译 class文件,然后生成一堆字节码,再一顿骚操作分析字节码,可谓是非常炫酷。这里有时间刚好也来玩玩JDK的 javap

javap 介绍

javap是 JDK自带的一个工具,可以将 class文件反编译成字节码,它并没有将class文件反编译成 java文件,但是依然反编译成程序员能读的格式。

下面举一个小例子,java源代码如下:

public class JavapTest2 {
   
    private String username;

    public void say(String username) {
        System.out.println("hi,"+username);
    }
}

将其编译后,使用 javap来查询 JavapTest2的字节码

javac JavapTest2.java
javap -p -v JavapTest2

生成的字节码如下:

Classfile ../JavapTest2.class
  Last modified 2018-8-31; size 608 bytes
  MD5 checksum 25f04ad8674616cb2f0e7fe9d35e6ab1
  Compiled from "JavapTest2.java"
public class com.pjmike.JVM.JavapTest2
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #10.#21        // java/lang/Object."<init>":()V
   #2 = Fieldref           #22.#23        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = Class              #24            // java/lang/StringBuilder
   #4 = Methodref          #3.#21         // java/lang/StringBuilder."<init>":()V
   #5 = String             #25            // hi,
   #6 = Methodref          #3.#26         // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/String
Builder;
   #7 = Methodref          #3.#27         // java/lang/StringBuilder.toString:()Ljava/lang/
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值