Java的.class 字节码文件

本文介绍了Java的Class文件,它是编译后的中间语言,字节码格式严格。内容包括类信息、常量池、访问标志、继承关系等,以及字节码指令的操作码和操作数。IDEA可设置目标字节码版本。
摘要由CSDN通过智能技术生成

概述

一种特定格式的二进制文件,它定义了一个类或接口的信息。
每个 类或接口 都会被编译为一个独立的Class文件。包括匿名内部类 。
javac.exe 将 .Java 文件编译成 .class 文件,然后 JVM 才能解释执行它。

特点

  • 字节码文件名 同类名。
  • 包含了被编译后的字节码,它是一种中间语言形式,介于源代码和目标机器代码之间。
  • 项目构建后,存放在编译结果中。
    1. out 存放的是该项目下所有Module(模块)的编译结果。
    2. target 存放的是单个Module的编译结果。
    3. 如果为某个Module指定了编译结果的路径,则不会再输出到out文件夹中了。
  • 格式严格限定,紧凑且没有分隔符。
  • 删除注释。
  • 无法直接阅读,能通过反编译工具 javap.exe,把 class 字节码文件反编译为源文件。
  • 本质:一串二进制字节流。而不是一个文件。

内容

• 类的字段、方法、接口等描述信息
• 常量池(constant_pool table):存放编译期已可知的常量。
这部分内容将在类加载后进入 方法区 存放(实际上在堆中)。
运行期间也可将新内容放入常量池(如String.intern()方法)。

结构

  • 魔数(Magic Number):前4个字节。
    作用:确定该文件是否能被某虚拟机接受。(安全考虑:文件扩展名可随意改动)
  • Class文件的版本号:4个字节。5-6字节是 次版本号,7-8字节是 主版本号。
    Class 文件向下兼容,不向上兼容。java8为 52.0。
    IDEA可以设置项目的目标字节码版本:
  • 常量池:就像资源仓库。
    常量数量在入口的 常量池容量计数值 设置,从1开始,代表0个。
    内容:字面量、符号引用。
  • 访问标志:2个字节。
    作用:识别一些类或接口层次的访问信息(这个Class是类还是接口、是否抽象类等)
  • 类索引、父类索引、接口索引
    作用:确定类的继承关系
  • 字段表集合
    作用:描述接口或类中声明的变量。
  • 方法表集合
    存储方法的信息。
  • 属性表集合

指令

字节码指令由 操作码 和 0或多个操作数 组成。
操作码:代表某种特定操作含义的数字,长1字节。
操作数:代表操作参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值