国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

關于Unsupported major.minor version 49.0的錯誤解決辦法

2019-11-26 14:48:43
字體:
來源:轉載
供稿:網友

在裝2個不同版本JDK時遇到了這個問題,在網上鉤了一吧!查到一個講解比較好的資料。

一:要解決的問題

我們在嘗鮮 JDK1.5 的時候,相信不少人遇到過 Unsupported major.minor version 49.0 錯誤,當時定會茫然不知所措。因為剛開始那會兒,網上與此相關的中文資料還不多,現在好了,網上一找就知道是如何解決,大多會告訴你要使用 JDK 1.4 重新編譯。那么至于為什么,那個 major.minor 究竟為何物呢?這就是本篇來講的內容,以使未錯而先知。

我覺得我是比較幸運的,因為在遇到那個錯誤之前已研讀過《深入 Java 虛擬機》第二版,英文原書名為《Inside the Java Virtual Machine》( Second Edition),看時已知曉 major.minor 藏匿于何處,但沒有切身體會,待到與 Unsupported major.minor version 49.0 真正會面試,正好是給我驗證了一個事實。

首先我們要對 Unsupported major.minor version 49.0 建立的直接感覺是:JDK1.5 編譯出來的類不能在 JVM 1.4 下運行,必須編譯成 JVM 1.4 下能運行的類。(當然,也許你用的還是 JVM 1.3 或 JVM 1.2,那么就要編譯成目標 JVM 能認可的類)。這也解決問題的方向。

二:major.minor 棲身于何處

何謂 major.minor,且又居身于何處呢?先感性認識并找到 major.minor 來。

寫一個 Java Hello World! 代碼,然后用 JDK 1.5 的編譯器編譯成,HelloWorld.java

package com.unmi;  public class HelloWorld  {    public static void main(String[] args)    {      System.out.println("Hello, World!");    }  } package com.unmi;public class HelloWorld{ public static void main(String[] args) { System.out.println("Hello, World!"); }}

用 JDK 1.5 的 javac -d .  HelloWorld.java 編譯出來的字節碼 HelloWorld.class 用 UltraEdit 打開來的內容如圖所示:

 

從上圖中我們看出來了什么是 major.minor version 了,它相當于一個軟件的主次版本號,只是在這里是標識的一個 Java Class 的主版本號和次版本號,同時我們看到 minor_version 為 0x0000,major_version 為 0x0031,轉換為十制數分別為0 和 49,即 major.minor 就是 49.0 了。

三:何謂 major.minor 以及何用

Class 文件的第 5-8 字節為 minor_version 和 major_version。Java class 文件格式可能會加入新特性。class 文件格式一旦發生變化,版本號也會隨之變化。對于 JVM 來說,版本號確定了特定的 class 文件格式,通常只有給定主版本號和一系列次版本號后,JVM 才能夠讀取 class 文件。如果 class 文件的版本號超出了 JVM 所能處理的有效范圍,JVM 將不會處理該 class 文件。

在 Sun 的 JDK 1.0.2 發布版中,JVM 實現支持從 45.0 到 45.3 的 class 文件格式。在所有 JDK 1.1 發布版中的 JVM 都能夠支持版本從 45.0 到 45.65535 的 class 文件格式。在 Sun 的 1.2 版本的 SDK 中,JVM 能夠支持從版本 45.0 到46.0 的 class 文件格式。

1.0 或 1.2 版本的編譯器能夠產生版本號為 45.3 的 class 文件。在 Sun 的 1.2 版本 SDK 中,Javac 編譯器默認產生版本號為 45.3  的 class 文件。但如果在 javac 命令行中指定了 -target 1.2 標志,1.2 版本的編譯器將產生版本號為 46.0 的 class 文件。1.0 或 1.1 版本的 JVM 上不能運行使用-target 1.2 標志所產生的 class 文件。

JVM 實現的 第二版中修改了對 class 文件主版本號和次版本號的解釋。對于第二版而言,class 文件的主版本號與 Java 平臺主發布版的版本號保持一致(例如:在 Java 2 平臺發布版上,主版本號從 45 升至 46),次版本號與特定主平臺發布版的各個發布版相關。因此,盡管不同的 class 文件格式可以由不同的版本號表示,但版本號不一樣并不代表 class 文件格式不同。版本號不同的原因可能只是因為 class 文件由不同發布版本的 java 平臺產生,可能 class 文件的格式并沒有改變。

上面三段節選自《深入 Java 虛擬機》,

主站蜘蛛池模板: 平邑县| 乌拉特后旗| 马公市| 香河县| 宁远县| 汶上县| 安远县| 锡林浩特市| 伊宁县| 遂平县| 县级市| 红安县| 酒泉市| 大兴区| 积石山| 确山县| 新郑市| 四平市| 黔东| 恩平市| 邹城市| 缙云县| 广安市| 含山县| 正镶白旗| 湟中县| 东乌| 山西省| 赣州市| 上林县| 易门县| 沙河市| 漳平市| 咸宁市| 交口县| 静宁县| 马山县| 都江堰市| 旌德县| 梁平县| 丽江市|