Exception in thread "main" java.lang.UnsupportedClassVersionError

前言

学习java也有几年了,以前也遇到过这样的问题。就是换了高版本的JDK就能解决。一直不知道什么原因。最近看了周志明的《02_深入理解Java虚拟机 JVM高级特性与最佳实践》这本书才明白为什么。

错误再现:

一、测试代码:
class Test 
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}

二、使用JDK8编译以后的class文件,使用winhex打开(十六进制表示)

这里写图片描述

解释:
	    class文件魔法值: 0xCAFEBABE 十六进制表示,相当于class文件类型的标志。很多
	                    文件都有这种魔法值,例如图片gif或者jpeg都有base64的表示           
	                    data:image/gif;base64, data:image/jpeg;base64, 表
	                    示图片的base64表示类型
		这里可以看出class文件的魔法值使用4个字节表示(一个十六进制占用4个bit,共8个十六进制)
		次版本: 0x00  换成十进制也是 0 
		主版本: 0x34  换成十进制及时 52 
所以可以看出class文件是使用52.0版本的JDK编译的,而java中初始版本为45,以后没一个大的版本都加1。所以可以推断该class文件是使用JDK8编译的。

三、使用JDK7运行

1#.将Test.class文件拷贝到我JDK7的bin目录下(D:\java\jdk1.7.0_51\bin)

这里写图片描述

2.在JDK7的bin目录下打开cmd命令窗口,运行Test.class文件

这里写图片描述

3.报错:

这里写图片描述

错误分析:

JVM中可以运行当前JDK版本或者比当前版本低的编译器编译的class文件,如果使用高版本的编译
器编译的class文件在低版本的JVM上运行将会报以上错误。

以下是周志明的《02_深入理解Java虚拟机 JVM高级特性与最佳实践》这本书给出的解释:

这里写图片描述

本人的个人博客地址:https://elfgirl.top/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值