`
hikin
  • 浏览: 266163 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

minor.major version 详解

阅读更多


从 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

分享到:
评论

相关推荐

    深入C#判断操作系统类型的总结详解

    return (Environment.OSVersion.Platform == PlatformID.Win32NT) && (Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor == 0); } } ``` - 判断操作系统是否为Windows XP: `...

    查看java类版本.pdf

    2. **major.minor version 意义**:`major_version`和`minor_version`共同定义了类文件的版本,这个版本号反映了Java虚拟机(JVM)能够理解和执行的类文件格式。主版本号的变化通常意味着较大的语法或结构更新,比如...

    tinymce插件开发

    version: tinymce.majorVersion + "." + tinymce.minorVersion }; }, createControl: function (name, cm) { // 控件创建逻辑 var ctrl = new tinymce.ui.Control(name, cm); // 自定义控件代码 return ctrl...

    详解package.json版本号规则

    major.minor.patch 主版本号.次版本号.修补版本号 patch:修复bug,兼容老版本 minor:新增功能,兼容老版本 major:新的架构调整,不兼容老版本 依赖版本号规则 version 必须匹配某个版本 如:1.1.2,表示必须依赖...

    Python库 | py_semver-0.0.3-py3-none-any.whl

    print(version.major, version.minor, version.patch) # 输出:1 2 3 ``` 总结来说,`py_semver`库为Python开发者提供了强大的SemVer支持,使得在处理版本管理时更加规范和方便。无论是小型项目还是大型复杂系统,...

    PHP预定义常量详解.md

    ### PHP预定义常量详解 #### 一、概述 PHP作为一种广泛使用的开源脚本语言,不仅支持快速构建动态网页,还提供了丰富的内置功能。其中,预定义常量是在PHP脚本执行过程中始终可用的一类特殊变量,它们无需事先声明...

    MyEclipse+WebLogic配置详解[参考].pdf

    WebLogic 8不支持JDK 1.5,这意味着使用JDK 1.5编译的程序在WebLogic 8上运行时会报"Unsupported major.minor version 49.0"错误。解决此问题的方法是使用JDK 1.4重新编译代码,或者升级WebLogic到9.2版,因为...

    MyEclipse 5.0GA + WebLogic 9.2 配置详解

    其次,如果选择J2EE 1.3进行开发,可能会遇到“Unsupported major.minor version 49.0”的错误,这是由于WebLogic 8不支持JDK 1.5导致的。为了解决这个问题,你可以选择使用JDK 1.4重新编译项目,或者升级WebLogic到...

    字节码文件结构详解.docx

    2. **minor_version** 和 **major_version**:分别表示次要版本号和主要版本号,定义了 Class 文件的 Java 版本。 3. **constant_pool_count** 和 **constant_pool**:常量池表,存储各种常量和引用,包括字符串、...

    c++软件版本号定义.docx

    ### C++软件版本号定义详解 #### 一、概述 在软件开发过程中,对软件进行版本控制是一项重要的工作。这不仅有助于开发团队更好地追踪代码的变化,同时也方便用户了解当前使用的软件版本状态。本文将深入探讨如何在...

    Java Class文件格式详解1

    接下来是`minor_version`和`major_version`,这两个字段共同构成了Class文件的版本号,用于指示文件的语法和特性。这通常与Java版本相关,例如,59.0对应于Java 11。 2. **常量池** `constant_pool`是Class文件的...

    CMake中文手册

    printf("Version: %d.%d\n", Tutorial_VERSION_MAJOR, Tutorial_VERSION_MINOR); ``` #### 5. CMake的高级特性 除了上述基础知识之外,CMake还提供了许多高级功能,如条件编译、宏定义、自定义命令等,这些都可以...

    【项目管理知识】软件项目版本号的命名规则及格式介绍.docx

    - **英文对照**: Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]] - **示例**: 1.2.1, 2.0, 5.0.0build-13124 **管理策略**: - **初始版本**: 版本号可以设为0.1或0.1.0,也可以为...

    maven3.0.4详解

    - 版本号通常遵循`MAJOR.MINOR.PATCH`格式。 #### 六、私服 1. **私服安装** - 私服(私有仓库)用于企业内部的依赖管理。 - 常见的私服软件有Nexus和Artifactory。 - Nexus的安装过程简单直观,可以通过下载...

    python ctypes模块

    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` ...

    04 - ASM之ClassFile - 简书1

    2. minor_version和major_version:占用2个字节,用于标识ClassFile的minor版本和major版本号。 3. constant_pool_count:占用2个字节,用于标识常量池的数量。 4. constant_pool:是一个数组,用于存储常量池中的...

    MFC Excel类

    excelApp.GetProperty(_T("Version"), &majorVersion, &minorVersion); ``` 最后,完成所有操作后,记得关闭Excel应用程序并释放资源: ```cpp excelApp.GetProperty(_T("Visible"), varMissing, varVisible); // ...

    安装版XP在T13调用自由天空DrvS3.exe实现驱动安装的方法

    - `MajorVersion=5`:主版本号为5,即Windows XP的主版本号。 - `MinorVersion=1`:次版本号为1,即表示Windows XP Service Pack 1。 - `BuildNumber=2600`:构建号为2600,这是Windows XP SP2的构建号。 2. **...

    cmake参考文档

    - **宏定义**:`@Tutorial_VERSION_MAJOR@` 和 `@Tutorial_VERSION_MINOR@` 会被CMake配置过程中设置的实际版本号替换。 #### 六、CMake高级特性 - **条件判断**:可以通过`if`语句控制某些配置的启用或禁用。 - **...

Global site tag (gtag.js) - Google Analytics