深入理解Java虚拟机——魔数与Class文件的版本
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解Java虚拟机——魔数与Class文件的版本相关的知识,希望对你有一定的参考价值。
目录
一、魔数
1.1、魔数的概述
- 每个Class文件的头4个字节称为魔数。
- Class文件的魔数的获得很有“浪漫气息”,值为0xCAFEBABE(咖啡宝贝?),这个魔数值在Java还称做“Oak”语言的时候(大约是1991年前后)就已经确定下来了。
1.2、魔数的作用
- 确定这个文件是否为一个能被虚拟机接收的Class文件。
1.3、版本号
-
紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6个字节是次版本号(minor Version),第7和第8个字节是主版本号(Major Version)。
-
Java的版本号是从45开始的,JDK1.1之后的每个JDK大版本发布主版本号向上加1。
-
最新的JDK1.7,可生成的Class文件主版本号最大值是51.0。
-
JDK1.1到JDK1.7,主流JDK版本编译器输出的默认和支持的Class文件版本号如下表:
译器版本 -target参数 十六进制版本号 十进制版本号 JDK1.1.8 不能带target参数 00 03 00 2D 45.3 JDK1.2.2 不带(默认为 -target 1.1) 00 03 002D 45.3 JDK1.2.2 -target 1.2 00 00 002E 46.0 JDK1.3.1_19 不带(默认为 -target 1.1) 00 03 00 2D 45.3 JDK1.3.1_19 -target 1.3 00 00 00 2F 47.0 JDK1.4.2_10 不带(默认为 -target 1.2 00 00 00 2E 46.0 JDK1.4.2_10 -target 1.4 00 00 00 30 48.0 JDK1.5.0_11 不带(默认为 -target 1.5 00 00 00 31 49.0 JDK1.5.0_11 -target 1.4 -source 1.4 00 00 00 30 48.0 JDK1.6.0_01 不带(默认为 -target 1.6 00 00 00 32 50.0 JDK1.6.0_01 -target 1.5 00 00 00 31 49.0 JDK1.6.0_01 -target 1.4 -source 1.4 00 00 00 30 48.0 JDK1.7.0 不带(默认为 -target 1.7 00 00 00 33 51.0 JDK1.7.0 -target 1.6 00 00 00 32 50.0 JDK1.7.0 -target 1.4 -source 1.4 00 00 00 30 48.0
二、通过Binary Viewer工具查看编译后的Class文件
2.1、Binary Viewer工具的下载与安装
2.2、Binary Viewer工具查看编译后的Class文件
-
代码
public class Test2 public static void main(String[] args) System.out.println("hello world");
-
查看编译后的class文件
以上是关于深入理解Java虚拟机——魔数与Class文件的版本的主要内容,如果未能解决你的问题,请参考以下文章