博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记之《实战Java虚拟机》(9):Class 文件结构
阅读量:6376 次
发布时间:2019-06-23

本文共 1256 字,大约阅读时间需要 4 分钟。

语言无关性

各种语言由源代码编译成 Class 文件,最终得以在 Java 虚拟机上执行;

Class 文件

Class 文件的结构严格定义为:

  1. 文件以一个 4 字节的 Magic (魔数)开头,紧跟着两个大小版本号;
  2. 版本号之后是常量池;
  3. 之后是类的访问修饰符、代表自身类的引用、父类引用以及接口数量和实现的接口引用;
  4. 接口之后,有着字段的数量和字段描述、方法数量以及方法的描述;
  5. 最后,存放着类文件的属性信息;

Class 文件标志 —— 魔数

魔数(Magic Number)作为 Class 文件的标志,用来告诉 Java 虚拟机,这是一个 Class 文件。魔数是一个 4 个字节的无符号整数,固定为 0xCAFEBABE。

/** * @author caojiantao */public class SimpleUser {    public static final int TYPE = 1;    private int id;    private String name;    public int getId(){        return id;    }    public void setId(int id) throws IllegalMonitorStateException {        try {            this.id = id;        } catch (IllegalStateException e) {            System.out.println(e.toString());        }    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}复制代码

编译生成 Class 文件,通过 Sublime Text 打开:

Class 文件的版本

紧接着是 Class 的小版本和大版本号,表示当前 Class 文件,由哪个版本的编译器编译产生的。

版本号和 Java 编译器的对应关系如下表所示:

小版本 大版本 编译器版本
3 45 1.1
0 46 1.2
0 47 1.3
0 48 1.4
0 49 1.5
0 50 1.6
0 51 1.7
0 52 1.8

对应上图大版本号为 0x34,换算为 10 进制为 52,因此判断该 Class 文件有 JDK 1.8 编译器生成的。

... ...

操作字节码:走进 ASM

ASM 是一款 Java 字节码的操作库,像 AspectJ、Spring 以及 CGLIB 都是 ASM 的使用者。由于它直接工作与底层,性能很高,使用也较为灵活。

转载于:https://juejin.im/post/5c98f1396fb9a0711103dea0

你可能感兴趣的文章
.NET中的泛型和Java泛型中的类型擦除
查看>>
白利用的集大成者:新型远控木马上演移形换影大法
查看>>
2017必备的八款最佳反勒索软件工具
查看>>
从Effective Java总结一些有助安卓开发的建议
查看>>
以一当十的程序员不是传说
查看>>
Vizinex RFID 和Brady SmartID推出航空标签
查看>>
Facebook 否认趋势话题存在政治偏见,但将做出调整
查看>>
云纵发布“纵横客“ 新一代互联网CRM开启餐饮行业营销新模式
查看>>
物联网到底何时才能称为“爆发”?
查看>>
《Java多线程编程核心技术》——1.2节使用多线程
查看>>
不用惊慌 关于苹果警告的一些分析
查看>>
《VMware 网络技术:原理与实践》—— 2.3 OSI模型
查看>>
金融安全资讯精选 2017年第十五期:普华永道消费者隐私信息保护调研称69%的企业无力面对网络攻击,中小银行转型系统整合中的建议...
查看>>
读书笔记之《实战Java虚拟机》(9):Class 文件结构
查看>>
面对区块链这项全新的技术,传统投资产生了焦虑
查看>>
1024城市峰会 | 当A.I.邂逅古都西安
查看>>
好看的卡片阴影
查看>>
理解 Mach O 并提高程序启动速度
查看>>
Vue实战篇(PC端商城项目)
查看>>
每周记录(二)
查看>>