从 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 |
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 的因素)
转自:http://blog.csdn.net/xiaxiaorui2003/archive/2009/07/07/4327029.aspx
分享到:
相关推荐
return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor == 0); } } ``` - 判断操作系统是否为Windows XP: `...
2. **major.minor version 意义**:`major_version`和`minor_version`共同定义了类文件的版本,这个版本号反映了Java虚拟机(JVM)能够理解和执行的类文件格式。主版本号的变化通常意味着较大的语法或结构更新,比如...
version: tinymce.majorVersion + "." + tinymce.minorVersion }; }, createControl: function (name, cm) { // 控件创建逻辑 var ctrl = new tinymce.ui.Control(name, cm); // 自定义控件代码 return ctrl...
major.minor.patch 主版本号.次版本号.修补版本号 patch:修复bug,兼容老版本 minor:新增功能,兼容老版本 major:新的架构调整,不兼容老版本 依赖版本号规则 version 必须匹配某个版本 如:1.1.2,表示必须依赖...
print(version.major, version.minor, version.patch) # 输出:1 2 3 ``` 总结来说,`py_semver`库为Python开发者提供了强大的SemVer支持,使得在处理版本管理时更加规范和方便。无论是小型项目还是大型复杂系统,...
### PHP预定义常量详解 #### 一、概述 PHP作为一种广泛使用的开源脚本语言,不仅支持快速构建动态网页,还提供了丰富的内置功能。其中,预定义常量是在PHP脚本执行过程中始终可用的一类特殊变量,它们无需事先声明...
WebLogic 8不支持JDK 1.5,这意味着使用JDK 1.5编译的程序在WebLogic 8上运行时会报"Unsupported major.minor version 49.0"错误。解决此问题的方法是使用JDK 1.4重新编译代码,或者升级WebLogic到9.2版,因为...
其次,如果选择J2EE 1.3进行开发,可能会遇到“Unsupported major.minor version 49.0”的错误,这是由于WebLogic 8不支持JDK 1.5导致的。为了解决这个问题,你可以选择使用JDK 1.4重新编译项目,或者升级WebLogic到...
2. **minor_version** 和 **major_version**:分别表示次要版本号和主要版本号,定义了 Class 文件的 Java 版本。 3. **constant_pool_count** 和 **constant_pool**:常量池表,存储各种常量和引用,包括字符串、...
### C++软件版本号定义详解 #### 一、概述 在软件开发过程中,对软件进行版本控制是一项重要的工作。这不仅有助于开发团队更好地追踪代码的变化,同时也方便用户了解当前使用的软件版本状态。本文将深入探讨如何在...
接下来是`minor_version`和`major_version`,这两个字段共同构成了Class文件的版本号,用于指示文件的语法和特性。这通常与Java版本相关,例如,59.0对应于Java 11。 2. **常量池** `constant_pool`是Class文件的...
printf("Version: %d.%d\n", Tutorial_VERSION_MAJOR, Tutorial_VERSION_MINOR); ``` #### 5. CMake的高级特性 除了上述基础知识之外,CMake还提供了许多高级功能,如条件编译、宏定义、自定义命令等,这些都可以...
- **英文对照**: Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]] - **示例**: 1.2.1, 2.0, 5.0.0build-13124 **管理策略**: - **初始版本**: 版本号可以设为0.1或0.1.0,也可以为...
- 版本号通常遵循`MAJOR.MINOR.PATCH`格式。 #### 六、私服 1. **私服安装** - 私服(私有仓库)用于企业内部的依赖管理。 - 常见的私服软件有Nexus和Artifactory。 - Nexus的安装过程简单直观,可以通过下载...
print(major_version, minor_version, patch_version) print(pinfo.build) print(pinfo.cpu_flags) print(pinfo.num_threads) else: print("ERROR") ``` 在这个示例中,我们首先创建了一个 `xvid_gbl_info_t` ...
2. minor_version和major_version:占用2个字节,用于标识ClassFile的minor版本和major版本号。 3. constant_pool_count:占用2个字节,用于标识常量池的数量。 4. constant_pool:是一个数组,用于存储常量池中的...
excelApp.GetProperty(_T("Version"), &majorVersion, &minorVersion); ``` 最后,完成所有操作后,记得关闭Excel应用程序并释放资源: ```cpp excelApp.GetProperty(_T("Visible"), varMissing, varVisible); // ...
- `MajorVersion=5`:主版本号为5,即Windows XP的主版本号。 - `MinorVersion=1`:次版本号为1,即表示Windows XP Service Pack 1。 - `BuildNumber=2600`:构建号为2600,这是Windows XP SP2的构建号。 2. **...
- **宏定义**:`@Tutorial_VERSION_MAJOR@` 和 `@Tutorial_VERSION_MINOR@` 会被CMake配置过程中设置的实际版本号替换。 #### 六、CMake高级特性 - **条件判断**:可以通过`if`语句控制某些配置的启用或禁用。 - **...