Java major.minor

做Java开发的同学应该经常遇到

Unsupported major.minor version 52.0

这样的错误,这个错误是怎么产生的呢?需要从java class文件的版本说起:
java版本分为major和minor, 其中major表示的是java大版本号,例如52表示jdk8, minor主要是一些小的版本更新。
通过javap -verbose 全限定类名可以查看class文件的编译版本。例如:

public class MainClass {
    public static void main(String args[]) {
        System.out.println("hello world");
    }
}

用jdk8编译出来后, javap -verbose MainClass, 结果中可以看到:

  SourceFile: "MainClass.java"
  minor version: 0
  major version: 52

如果用jdk7编译:

  SourceFile: "MainClass.java"
  minor version: 0
  major version: 51

显然,major.minor就是class文件的编译版本

那么这个异常是怎么出现的呢?

一个java文件编译出来后,一般有两种用途:

  1. 在最终软件中运行
  2. 打包成库,供其他软件集成
    在这两种情况下,java都只具有前向兼容性,也就是低版本编译出来的类文件,可以在高版本集成和运行, 但反过来就会抛出Unsupported major.minor异常了
    以上面的MainClass.java为例:
    jdk7编译出来, 用java8运行:
屏幕快照 2017-01-14 上午11.32.08.png

能正常输出Hello world

但反过来, jdk8编译,java7运行:

屏幕快照 2017-01-14 上午11.29.31.png

对于集成java库也是一样,jdk7编译出来的包,可以在jdk8上集成,反之则不行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 每个使用Java的开发者都知道Java字节码是在JRE中运行(JRE: Java 运行时环境)。JVM则是JRE中...
    燕京博士阅读 5,366评论 0 6
  • 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
    xiaogmail阅读 10,697评论 1 34
  • Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实...
    Rick617阅读 4,353评论 0 0
  • 深入理解 Java 虚拟机 文章太长了,拆成两部分,这是第一部分。 每一个使用 Java 的开发者都知道 Java...
    唐先僧阅读 10,215评论 7 21
  • 惬意的午后,漫步于蓉园,今天的阳光特别好,刚好是我喜欢的那种。今天的阳光穿透力很强,明暗分明,这一步还处于阴冷的阴...
    追光者_3657阅读 2,224评论 1 4