如何查看 Java 的字节码文件?

在 Java 中,字节码文件.class实际上是二进制文件,并不能直接查看。要想查看,我们只能通过反编译对其进行解析,然后查看解析后的源码。

如何反编译字节码文件

  1. 要想反编译字节码文件,我们首先要对.java文件进行编译,得到字节码.class文件。以Java 类 HelloWorld.java 为例:

    public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");}
    }
    
    javac HelloWorld.java
    
  2. 然后使用 JDK 自带的字节码反编译工具javap.class文件进行反编译:

    javap -c HelloWorld
    
    # 下面为反编译后的内容
    Compiled from "HelloWorld.java"
    public class HelloWorld {public HelloWorld();Code:0: aload_01: invokespecial #14: returnpublic static void main(java.lang.String[]);Code:0: getstatic     #73: ldc           #135: invokevirtual #158: return
    }
    

文章到此就已经结束~


附录:javap 参数详解

javap是一个用于反汇编Java类文件的命令行工具,可以用来查看Java类的字节码信息。javap的常用参数如下:

  • -c:以指令序列的形式输出字节码文件。
  • -v:以详细信息的形式输出字节码文件。
  • -s:输出Java源代码中的所有常量池字符串。
  • -l:输出行号表和局部变量表。
  • -classpath:指定查找类文件的路径,可以是目录名或者Jar文件名。
  • -J:传递参数给JVM,例如指定最大堆内存大小等。

附录:反编译字节码后的格式说明

Java类的字节码信息格式是一种二进制格式,它由一系列字节码指令构成。Java类的字节码信息可以通过javap命令来查看,可以以不同的格式输出。

  • 魔数(Magic Number):4个字节,标识文件类型,Java类文件的魔数为0xCAFEBABE。
  • 版本号(Version Number):2个字节,表示类文件的版本信息。
  • 常量池(Constant Pool):由一系列常量表项(Constant Pool Entry)构成,用于存储常量池中的常量。
  • 访问标志(Access Flags):2个字节,用于描述类或接口的访问修饰符,例如public、final、abstract等。
  • 类索引、父类索引和接口索引表:4个字节,分别用于表示该类、父类和实现的接口在常量池中的索引。
  • 字段表和方法表:由一系列字段表项(Field Table Entry)和方法表项(Method Table Entry)构成,用于存储类的字段和方法信息。
  • 属性表:由一系列属性表项(Attribute Table Entry)构成,用于存储类、字段或方法的其他属性信息,例如注解、源文件名等。

Java反编译字节码文件相关推荐

  1. java反编译字节码

    class代码: package my;public class MyTest {public static void main(String[] args) {String a = "ab ...

  2. idea如何反编译字节码指令_美团点评:Java字节码增强技术,线上问题诊断利器...

    作者简介:泽恩,美团到店住宿业务研发团队工程师.文章转载于公众号:美团技术团队 1. 字节码 1.1 什么是字节码? Java之所以可以"一次编译,到处运行",一是因为JVM针对各 ...

  3. 实践详解javap命令(反编译字节码)

    1 缘起 最近在补充JVM相关知识,开始学着看Java字节码反编译结果, 对于目前的我而言,只是单纯地补充知识,没有实际的应用启发, 不过,还是要丰富自己的底层知识, 现整理学习过程的测试文档,分享如 ...

  4. 命令查看java的class字节码文件、verbose、synchronize、javac、javap

    查看Java字节码 1 javac –verbose查看运行类是加载了那些jar文件 HelloWorld演示: public class Test {public static void main( ...

  5. java反编译源码_java反编译获取源码

    //实现反编译的类,现在可以判断具体有哪些方法,但是方法里面的具体细节还不能输出 importjava.lang.reflect.Constructor;importjava.lang.reflect ...

  6. java编译会产生多少个类文件,编译一个定义了三个类和四个方法的Java源程序文件,总共会产生多少个字节码文件 ? ( )...

    编译一个定义了三个类和四个方法的Java源程序文件,总共会产生多少个字节码文件 ? ( ) 更多相关问题 论述风化作用基本概念及其主要类型. 什么是药用植物 学?其 研究任务是什么 ? 庐山瀑布很有名 ...

  7. 一个java源文件中可以声明多少个class与编译后会生成多少个字节码文件

    在一个java源文件中可以声明多个class. 但是,只能最多有一个类声明为public的. 而且要求声明为public的类的类名必须与源文件名相同. 编译的过程 编译以后,会生成一个或多个字节码文件 ...

  8. 什么是java源码文件,什么是字节码文件,初程序的编译和运行

    java源文件就是源代码文件,是指我们编写好的代码文件,即 当我们开始运行的时候系统会执行javac命令先把java源文件编译成字节码文件即: 这里科普一下java为什么会有字节码文件. 字节码产生的 ...

  9. 使用uncompyle2直接反编译python字节码文件pyo/pyc

    转自:https://www.cnblogs.com/rainduck/p/3524557.html update:在Mac OS X版的September 10, 2014版(5.0.9-1)中发现 ...

最新文章

  1. 公司新来的同事一顿操作把大家整懵了,问了他的经历细思极恐。。。
  2. html DOM操作表格及样式
  3. iis url重写 域名跳转子目录_逐浪CMS小哥整理IIS设置URL重写,实现页面的跳转的重定向方法...
  4. 第七章:XAML vs. code(3)
  5. python中的语言特性_python自测——语言特性
  6. C++实现utf8和gbk编码字符串互相转换
  7. python为什么import不了_python – 为什么PyImport_Import无法从当前目录加载模块?
  8. 2021 第十二届蓝桥杯大赛软件赛省赛(第二场),C/C++大学B组题解
  9. 【LeetCode】524-通过删除字母匹配到字典里最长单词
  10. 算法竞赛入门经典(第二版)习题解答——第一章
  11. SAP License:影响中国信息化全面预算管理八大成功案例
  12. CentOS8环境中使用Graghics Magick将CMYK图片生成适用于chrome、Edge、QQ浏览器浏览的sRGB图片
  13. 下拉菜单(Dropdown)
  14. 当读/写磁盘文件时,read/write是不带缓冲机制的吗?请说明原因。
  15. Linux基础命令之:top命令详解以及VIRT,RES,SHR,DATA
  16. 两年多工作心得和体会
  17. 多CPU和多核CPU对应多进程和多线程调度
  18. 《信贷的逻辑与常识》笔记
  19. 【office】Visio 2016 画大括号(花括号) + 调整花括号尖角居中
  20. 【浏览器】360浏览器默认用极速模式打开页面

热门文章

  1. java 大转盘算法_大转盘 算法介绍
  2. node安装:npm install xxx命令出现npm ERR code EPERM错误
  3. ameya三极管的分类及主要参数应用
  4. 技术员 Ghost Win 7 Sp1(x86/x64)特别版 2018
  5. 疑似抄袭!如何看待澳门大学智慧城市物联网国家重点实验室2021 ICCV 发表的论文《PU-EVA》涉嫌抄袭?...
  6. 我来告诉你OFD格式发票用什么软件打开
  7. 【Java】翻页 cursor与page翻页
  8. Ajax入门和发送http请求
  9. Vue Echarts 河南省疫情图
  10. c++简单的停车场管理计费系统