JDK?version和class?file?version(Class編譯版本號(hào))對(duì)應(yīng)關(guān)系解讀
JDK version和class file version(Class編譯版本號(hào))對(duì)應(yīng)關(guān)系
JDK 19 = 63,
JDK 18 = 62,
JDK 17 = 61,
JDK 16 = 60,
JDK 15 = 59,
JDK 14 = 58,
JDK 13 = 57,
JDK 12 = 56,
JDK 11 = 55,
JDK 10 = 54,
JDK 9 = 53,
JDK 8 = 52,
JDK 7 = 51,
JDK 6.0 = 50,
JDK 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45.0-45.6
可以使用下列的方式來查看
使用文本編輯器EmEditor等以16進(jìn)制方式打開.class文件,
在魔數(shù)之后的就是次版本號(hào)和主版本號(hào):

圖中紅框中的代表版本號(hào)52.0
- 次版本號(hào):00 00 (小數(shù)點(diǎn)后面的部分)
- 主版本號(hào):00 34 (小數(shù)點(diǎn)前面的部分)對(duì)應(yīng)的10進(jìn)制為52,對(duì)應(yīng)的jdk版本為jdk8

各個(gè)版本的對(duì)應(yīng)關(guān)系
| JDK版本號(hào) | Class版本號(hào) | 16進(jìn)制 |
|---|---|---|
| 1.1 | 45.0 | 00 00 00 2D |
| 1.2 | 46.0 | 00 00 00 2E |
| 1.3 | 47.0 | 00 00 00 2F |
| 1.4 | 48.0 | 00 00 00 30 |
| 1.5 | 49.0 | 00 00 00 31 |
| 1.6 | 50.0 | 00 00 00 32 |
| 1.7 | 51.0 | 00 00 00 33 |
| 1.8 | 52.0 | 00 00 00 34 |
備注:
文件結(jié)構(gòu)可以在JVM規(guī)范里查看,鏈接里是Java SE 19的版本 Chapter 4. The class File Format (oracle.com)
https://docs.oracle.com/javase/specs/jvms/se19/html/jvms-4.html#jvms-4.1
其它jdk版本的話,更改下鏈接里的se后的值就行。

jar包對(duì)不同JDK版本的兼容性問題:Unsupported major.minor version 52.0

Unsupported major.minor version 52.0 這類錯(cuò)誤是因?yàn)镴ava版本不一致造成的,在高版本的JDK(1.8)環(huán)境中編譯JAR包,然后JAR在低版本的JVM(1.6)中運(yùn)行
The issue is because of Java version mismatch. Referring to the Wikipedia Java Class Reference :
- J2SE 8 = 52
- J2SE 7 = 51
- J2SE 6.0 = 50
- J2SE 5.0 = 49
- JDK 1.4 = 48
- JDK 1.3 = 47
- JDK 1.2 = 46
- JDK 1.1 = 45
These are the reported major numbers. The error regarding the unsupported major.minor version is because during compile time you are using a higher JDK and a lower JDK during runtime.
解決的方法
那么現(xiàn)在如果碰到這種問題該知道如何解決了吧,還會(huì)像我所見到有些兄弟那樣,去找個(gè) 1.4 的 JDK 下載安裝,然后用其重新編譯所有的代碼嗎?
其實(shí)大可不必如此費(fèi)神,我們一定還記得 javac 還有個(gè) -target 參數(shù),對(duì)啦,可以繼續(xù)使用 1.5 JDK,編譯時(shí)帶上參數(shù) -target 1.4 -source 1.4 就 OK 啦,不過你一定要對(duì)哪些 API 是 1.5 JDK 加入進(jìn)來的了如指掌,不然你的 class 文件拿到 JVM 1.4 下就會(huì) method not found。
目標(biāo) JVM 是 1.3 的話,編譯選項(xiàng)就用 -target 1.3 -source 1.3 了。
其實(shí)這種方式挺不方便,因?yàn)槟阆螺d的Eclipse工具有可能不支持低版本的JSK

所以,最簡(jiǎn)單方式還是對(duì) Eclipse 的項(xiàng)目屬性的設(shè)置(項(xiàng)目右鍵 -> properties -> Java Compiler, 設(shè)置"Compeler compliance settings"為1.6),如圖

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Sprigmvc項(xiàng)目轉(zhuǎn)為springboot的方法
本篇文章主要介紹了Sprigmvc項(xiàng)目轉(zhuǎn)為springboot的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
Java concurrency之Condition條件_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Condition的作用是對(duì)鎖進(jìn)行更精確的控制。下面通過本文給大家分享Java concurrency之Condition條件的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06
SpringBoot集成Access?DB實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入和解析
microsoft?office?access是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它結(jié)合了?microsoft?jet?database?engine?和?圖形用戶界面兩項(xiàng)特點(diǎn),是一種關(guān)系數(shù)據(jù)庫工具,本文給大家介紹了SpringBoot集成Access?DB實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入和解析,需要的朋友可以參考下2024-11-11
SpringBoot利用redis集成消息隊(duì)列的方法
這篇文章主要介紹了SpringBoot利用redis集成消息隊(duì)列的方法,需要的朋友可以參考下2017-08-08
Spring Cloud Alibaba教程之Sentinel的使用
這篇文章主要介紹了Spring Cloud Alibaba教程之Sentinel的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
基于Java開發(fā)一個(gè)極簡(jiǎn)版敏感詞檢測(cè)工具
這篇文章主要為大家詳細(xì)介紹了如何基于Java開發(fā)一個(gè)極簡(jiǎn)版敏感詞檢測(cè)工具,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-08-08

