`

JDK编译的版本号列表

    博客分类:
  • JAVA
 
阅读更多

现在不妨从 JDK 1.1 到 JDK 1.7 编译器编译出的 class 的默认 minor.major version 吧。(又走到 Sun 的网站上翻腾出我从来都没用过的古董来)

JDK 编译器版本 target 参数 十六进制 minor.major 十进制 minor.major
jdk1.1.8 不能带 target 参数 00 03   00 2D 45.3
jdk1.2.2 不带(默认为 -target 1.1) 00 03   00 2D 45.3
jdk1.2.2 -target 1.2 00 00   00 2E 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
j2sdk1.4.2_10 不带(默认为 -target 1.2) 00 00   00 2E 46.0
j2sdk1.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.6) 00 00   00 32 50.0
jdk1.7.0 -target 1.7 00 00   00 33 51.0
jdk1.7.0 -target 1.4 -source 1.4 00 00   00 30 48.0
Apache Harmony 5.0M3 不带(默认为 -target 1.2) 00 00   00 2E 46.0
Apache Harmony 5.0M3 -target 1.4 00 00   00 30 48.0


上面比较是 Windows 平台下的 JDK 编译器的情况,我们可以此作些总结:

1) -target 1.1 时 有次版本号,target 为 1.2 及以后都只用主版本号了,次版本号为 0
2) 从 1.1 到 1.4 语言差异比较小,所以 1.2 到 1.4 默认的 target 都不是自身相对应版本
3) 1.5 语法变动很大,所以直接默认 target 就是 1.5。也因为如此用 1.5 的 JDK 要生成目标为 1.4 的代码,光有 -target 1.4 不够,必须同时带上 -source 1.4,指定源码的兼容性,1.6/1.7 JDk 生成目标为 1.4 的代码也如此。
4) 1.6 编译器显得较为激进,默认参数就为 -target 1.6。因为 1.6 和 1.5 的语法无差异,所以用 -target 1.5 时无需跟着 -source 1.5。
5) 注意 1.7 编译的默认 target 为 1.6
6) 其他第三方的 JDK 生成的 Class 文件格式版本号同对应 Sun 版本 JDK
7) 最后一点最重要的,某个版本的 JVM 能接受 class 文件的最大主版本号不能超过对应 JDK 带相应 target 参数编译出来的 class 文件的版本号

上面那句话有点长,一口气读过去不是很好理解,举个例子:1.4 的 JVM 能接受最大的 class 文件的主版本号不能超过用 1.4 JDK 带参数 -target 1.4 时编译出的 class 文件的主版本号,也就是 48。

因为 1.5 JDK 编译时默认 target 为 1.5,出来的字节码 major.minor version 是 49.0,所以 1.4 的 JVM 是无法接受的,只有抛出错误。

那么又为什么从 1.1 到 1.2、从 1.2 到 1.3 或者从 1.3 到 1.4 的 JDK 升级不会发生 Unsupported major.minor version 的错误呢,那是因为 1.2/1.3/1.4 都保持了很好的二进制兼容性,看看 1.2/1.3/1.4 的默认 target 分别为 1.1/1.1/1.2 就知道了,也就是默认情况下1.4 JDK 编译出的 class 文件在 JVM 1.2 下都能加载执行,何况于 JVM 1.3 呢?(当然要去除使用了新版本扩充的 API 的因素)

六:找到问题解决的方法

那么现在如果碰到这种问题该知道如何解决了吧,还会像我所见到有些兄弟那样,去找个 1.4 的 JDK 下载安装,然后用其重新编译所有的代码吗?其实大可不必如此费神,我们一定还记得 javac 还有个 -target 参数,对啦,可以继续使用 1.5 JDK,编译时带上参数 -target 1.4 -source 1.4 就 OK 啦,不过你一定要对哪些 API 是 1.5 JDK 加入进来的了如指掌,不能你的 class 文件拿到 JVM 1.4 下就会 method not found。目标 JVM 是 1.3 的话,编译选项就用 -target 1.3 -source 1.3 了。

相应的如果使用 ant ,它的 javac 任务也可对应的选择 target 和 source

<javac target="1.4" source="1.4" ............................/>

分享到:
评论

相关推荐

    jdk8文件【版本号jdk1.8.0_151】

    Java Development Kit (JDK) 8 是 Java 编程语言的一个重要版本,其版本号 `jdk1.8.0_151` 表示这是一个更新版本,属于8u151更新。JDK是Java程序员开发Java应用程序的基础工具集,它包含编译器、调试器、文档生成...

    jdk双版本.zip

    JDK 8u202是Java 8的更新版本,"u202"代表该版本的具体更新号,意味着它是第八个主要版本的第202次更新。对于Windows系统,JDK通常以.exe可执行文件形式提供,方便用户进行图形化安装。 接着,第二个子文件“jdk-8...

    java 类反编译工具支持JDK1.8

    标题提到的是一个针对 JDK 1.8 版本的 Java 反编译工具,这表明该工具兼容 Java 8 的字节码,能够在不拥有源代码的情况下查看和理解类文件的实现细节。描述中提到了作者在寻找可用的工具过程中遇到困难,最终找到并...

    JDK1.8版本

    Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。JDK1.8版本是Oracle公司发布的一个重要里程碑,它在2014年推出,引入了许多创新特性,极大地...

    JDK版本切换工具

    只需在项目根目录下创建一个`.jdk-version`或`.sdkman-candidates`文件,写入所需JDK版本号即可。 总之,"JDK版本切换工具"是提高开发效率的重要工具,它使得在多版本JDK环境中的工作变得简单且高效。通过学习和...

    jdk11 免费下载 / 版本号 jdk11.0.4.zip

    这个主题主要是关于JDK 11的免费下载及其版本号为11.0.4的详细说明。 **JDK 11的主要特性:** 1. **模块化系统(Project Jigsaw)**:这是JDK 11的一个关键变化,引入了Jigsaw项目,将JRE分解为一系列模块,提高了...

    presto web ui yanagishima 最后一个jdk 8版本

    至于压缩包内的文件“yanagishima-20.0”,这可能是Yanagishima的一个特定版本,版本号为20.0。通常,每个版本都会有其独特的改进和修复,例如性能优化、新功能添加或已知问题的修复。在这个版本中,我们可以推测它...

    各版本jdk下载

    Java Development Kit(JDK)是Java编程语言的核心组件,它包含Java运行时环境(JRE)、编译器、工具集和其他必要的库,使得开发者能够编写、编译和调试Java应用程序。Oracle JDK是官方的Java开发工具包,由甲骨文...

    jdk1.5环境下编译的jar包在JDK1.4环境下运行

    在Java开发过程中,时常会遇到跨版本的问题,尤其是在旧版JDK环境中运行新版JDK编译的代码。这里我们讨论的焦点是“JDK1.5环境下编译的jar包在JDK1.4环境下运行”所遇到的问题,具体表现为“Unsupported major.minor...

    JDK17 windows版本下载

    下载的文件可能名为“jdk-8u版本号_windows-x64_bin.exe”,其中“版本号”会根据发布的时间而变化。确保你下载的是对应操作系统和处理器架构的正确版本,否则可能会出现兼容性问题。 安装JDK的过程相对简单。运行...

    java jdk 1.7官网免安装版本

    5. **JDK 1.7的版本号**:`jdk1.7.0_80`中的`80`代表该版本的更新号,表示这是JDK 7的第80次更新,通常会修复已知问题,增强性能和稳定性。 6. **下载与更新**:虽然Java JDK 1.7是旧版本,但有时出于兼容性考虑仍...

    java_jdk-8u161-windows-x64(jdk官方版本1.8)

    Java JDK包含了许多组件,其中最重要的是Java编译器(javac)、Java解释器(java)、Java虚拟机(JVM)以及Java类库,这些使得开发者能够编写、编译、调试和运行Java应用程序。 1. **Java编译器** (javac): 它将源...

    jdk1.8免安装版本

    JDK 1.8是Oracle公司发布的Java 8版本,其具体版本号为1.8.0_25。这个版本在Java的发展历程中扮演了重要的角色,引入了许多新的特性和改进,对于提升开发效率和优化应用程序性能有着显著的影响。 1. **Lambda...

    JDKwindows22版本

    Java 编译器(javac):用于将 Java 源代码编译成 Java 字节码,也就是 .class 文件。 Java 虚拟机(JVM):负责解释执行 Java 字节码,并将其转换为特定硬件平台的机器码。 Java 运行时环境(JRE):包含 Java ...

    JDK20 linux版本下载

    下载的文件可能名为“jdk-8u版本号_windows-x64_bin.exe”,其中“版本号”会根据发布的时间而变化。确保你下载的是对应操作系统和处理器架构的正确版本,否则可能会出现兼容性问题。 安装JDK20的过程相对简单。...

    JDK14 windows版本下载

    下载的文件可能名为“jdk-8u版本号_windows-x64_bin.exe”,其中“版本号”会根据发布的时间而变化。确保你下载的是对应操作系统和处理器架构的正确版本,否则可能会出现兼容性问题。 安装JDK的过程相对简单。运行...

    JDK11 windows版本下载

    下载的文件可能名为“jdk-8u版本号_windows-x64_bin.exe”,其中“版本号”会根据发布的时间而变化。确保你下载的是对应操作系统和处理器架构的正确版本,否则可能会出现兼容性问题。 安装JDK的过程相对简单。运行...

    jdk注册表任何版本

    这些信息包括JDK和JRE的安装路径、版本号、默认Java虚拟机(JVM)等。 2. 注册表文件(.reg):.reg文件是Windows操作系统中用来导入或导出注册表键值的文件格式。用户可以通过双击运行该文件,将其中的键值添加到...

    jdk反编译工具及其使用方法

    例如,在Windows上可能是`C:\Program Files\Java\jdk版本号\bin`,在macOS或Linux上可能是`/Library/Java/JavaVirtualMachines/jdk版本号.jdk/Contents/Home/bin`。 3. 使用JAD反编译:在命令行中,输入以下命令来...

    linux安装jdk1.8版本.zip

    这里我们有一个名为“linux安装jdk1.8版本”的压缩包,这可能包含了一个预编译的JDK 1.8二进制文件。你需要解压这个文件,可以使用`unzip`命令: ``` unzip linux安装jdk1.8版本.zip ``` 2. **选择安装位置**:...

Global site tag (gtag.js) - Google Analytics