赞
踩
java.lang.UnsupportedClassVersionError is one of the runtime error and thrown when a class is compiled by a more recent version that the current java version.
java.lang.UnsupportedClassVersionError是运行时错误之一,当使用比当前Java版本更高的版本来编译类时,抛出该错误。
java.lang.UnsupportedClassVersionError
is thrown. 每个java类都包含major.minor版本号,该数字表示java编译器版本。 每当我们执行一个Java类并且该类文件的版本号大于当前的Java版本号时,就会抛出java.lang.UnsupportedClassVersionError
。 Below table lists the java version and corresponding class file major.minor version.
下表列出了Java版本和相应的类文件major.minor版本。
Java Version | Class Major.Minor version |
---|---|
1.1 | 45.3 |
1.2 | 46.0 |
1.3 | 47.0 |
1.4 | 48.0 |
5 (1.5) | 49.0 |
6 | 50.0 |
7 | 51.0 |
8 | 52.0 |
9 | 53.0 |
Java版本 | 类Major.Minor版本 |
---|---|
1.1 | 45.3 |
1.2 | 46.0 |
1.3 | 47.0 |
1.4 | 48.0 |
5(1.5) | 49.0 |
6 | 50.0 |
7 | 51.0 |
8 | 52.0 |
9 | 53.0 |
Below image shows the UnsupportedClassVersionError class diagram.
下图显示了UnsupportedClassVersionError类图。
We need two java versions to produce UnsupportedClassVersionError, I have both Java 8 and java 9 installed in my system with java 8 being the default one.
我们需要两个Java版本来产生UnsupportedClassVersionError,我在系统中同时安装了Java 8和Java 9 ,而Java 8是默认版本。
- pankaj:temp pankaj$ java -version
- java version "1.8.0_131"
- Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
- Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
- pankaj:temp pankaj$ /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/java -version
- java version "9"
- Java(TM) SE Runtime Environment (build 9+181)
- Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
- pankaj:temp pankaj$
I created a simple hello world class in the some directory for our example and then compiled it with java 9 and then tried to run it with java 8.
我在示例的some目录中创建了一个简单的hello world类,然后使用Java 9对其进行了编译,然后尝试使用Java 8对其进行运行。
- pankaj:temp pankaj$ /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/javac HelloWorld.java
- pankaj:temp pankaj$ java HelloWorld
- Error: A JNI error has occurred, please check your installation and try again
- Exception in thread "main" java.lang.UnsupportedClassVersionError: HelloWorld has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0
- at java.lang.ClassLoader.defineClass1(Native Method)
- at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
- at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
- at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
- at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
- at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
- at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
- at java.security.AccessController.doPrivileged(Native Method)
- at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
- at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
- at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
- pankaj:temp pankaj$

So we were able to reproduce UnsupportedClassVersionError, the stack trace clearly shows the “class file version 53.0” that corresponds to Java 9 and current java supports version up to 52.0 that corresponds to java 8.
因此,我们能够重现UnsupportedClassVersionError,堆栈跟踪清楚地显示了与Java 9对应的“类文件版本53.0”,而当前的Java支持与Java 8对应的版本52.0。
- pankaj:temp pankaj$ javac HelloWorld.java
- pankaj:temp pankaj$ java HelloWorld
- Hello World
- pankaj:temp pankaj$
如果您有权访问Java源文件,则可以再次重新编译该类并以相同版本运行它。 因此,我可以再次编译HelloWorld类或使用Java 9运行它,两者都可以正常工作。 In that case we will have to upgrade our java version to the one able to support it. Since stack trace clearly specifies the class file version number, so we know which java version to install to execute the program.
在这种情况下,我们将必须将Java版本升级到能够支持它的版本。 由于堆栈跟踪明确指定了类文件的版本号,因此我们知道要安装哪个Java版本来执行程序。
That’s all for a quick roundup on java.lang.UnsupportedClassVersionError
, it’s a very simple error to fix.
这就是对java.lang.UnsupportedClassVersionError
的快速总结,这是一个非常简单的错误。
Reference: API Doc, Exception Handling in java
参考: API Doc , Java中的异常处理
翻译自: https://www.journaldev.com/18083/java-lang-unsupportedclassversionerror
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。