`
hikin
  • 浏览: 262266 次
  • 性别: 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

分享到:
评论

相关推荐

    Unsupported major.minor version 51.0

    Unsupported major.minor version 51.0

    version4j:用于帮助比较major.minor.patch版本的库

    版本4j ============= 用于帮助比较major.minor.patch版本的库。 实现标准的Comparable和Comparator接口。用法稳定的: <dependency><groupId>com.kcthota</groupId><artifactId>version4j</artifactId><version>4.0...

    Java 中解决Unsupported major.minor version 51.0的问题

    本文主要介绍解决Unsupported major.minor version 51.0的问题,这里给大家整理了详细资料,有需要的小伙伴可以参考下

    启动Tomcat报错Unsupported major.minor version xxx的解决方法

    主要为大家详细介绍了启动Tomcat报错Unsupported major.minor version xxx的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    关于Unsupported major.minor version 49.0的错误解决办法

    主要介绍了关于Unsupported major.minor version 49.0的错误解决办法的相关资料,需要的朋友可以参考下

    jpeglib_version_61

    jpeglib 61版本的VC工程, 直接编译可以生成库文件。

    vb自动升级源代码 自动升级程序

    frmSplash.Caption = "演示程序 版本号:" & App.Major & "." & App.Minor lblVersion.Caption = "版本 " & App.Major & "." & App.Minor & "." & App.Revision lblProductName.Caption = App.Title End Sub ...

    slimver-spec:仅轻量级和严格的数字版本控制 (major.minor.patch)

    规则版本字符串根据 semver 规范,更薄的版本字符串以MAJOR.MINOR.PATCH形式表示。 但是与 semver 相比,slimver 没有能力将预发布或构建元数据作为版本字符串的一部分。 它是严格意义上的三个正整数值(0 到 65535 ...

    Rancher部署K8s相关镜像(2)

    K8S Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean", BuildDate:"2020-04-16T11:56:40Z", GoVersion:...

    version-master:npm模块版本主

    版主 version-master可让您分析和比较版本。分析版本var Version = require ( 'version-master' ) ;var version1 = Version ( "1.0.0" ) ;console . log ( version1 . major ) ; // will be 1console . log ( ...

    javarebel.jar

    Javarebel是一个Jvm插件,它能够动态重新装载Java类特性。虽然现在还有些局限性,但它可以显著地增加开发速度。JavaRebel允许一个应用程序(独立的或运行在应用服务器上的应用)重新装载在运行过程中发生的大多数类...

    Synaptics TouchPad Interfacing Guide

    The minor version number starts over at 0 with each new major version, and increases by one whenever minor changes are made to the device or its firmware. In a complete version number such as “4.5...

    commons-compress包

    Caused by:xxx Unsupported major.minor version 52.0。翻译为中文:(Tomcat)不支持52.0版本的镜像 二、jdk与major.mijor version对应的关系如下 JDK 1.1 = 45 JDK 1.2 = 46 JDK 1.3 = 47 JDK 1.4 = 48 JDK 1.5 = ...

    LINUX远程管理工具SSH指南

    LINUX远程管理工具SSH指南,使用SSH远程操作玩LINUX系统的介绍。

    libtiff4.1及jpeg zip静态库windows

    In other cases the modifications required will be minor. Please note this is not an official release of libtiff. This version has been submitted for a future standard update. It was named version ...

    selenium自动化测试jar包

    包含selenium-server-standalone-3.0.1.jar,selenium-java-2.53.0.jar,selenium-java-2.53.0-srcs.jar及自动化测试所需要的jar包

    Java Class文件格式详解1

    2.2 major_version.minor_versionmajor_version.minor_version合在一起形成当前.class文件的版本号,

    vcs-semantic-version

    使用这种模式MAJOR.MINOR.PATCH-PRE_RELEASE填充project.version属性 如何使用 案例#1:使用 buildSemanticVersion 任务设置 project.version 1.1. 将com.github.moleksyuk.vcs-semantic-version插件应用于您的 ...

    EqualsHashCodeToStringBuilders-Java8:等于,使用Lambdas,Java8的HashCode和ToString Builder

    对于Idea或Eclipse,可以使用以下命令生成它们gradlew eclipse gradlew idea项目版本控制我们将遵循major.minor.micro.Alpha[n] major.minor.micro.Beta[n] major.minor.micro.CR[n]请参考AppConfig.groovy所有项目...

Global site tag (gtag.js) - Google Analytics