一直以來(lái)都是用jdk1.5,這次重返電信由于其系統(tǒng)是在jdk1.4上編譯的,編譯的時(shí)候出現(xiàn)了unsupported major.minor version49.0的錯(cuò)誤,上網(wǎng)查看了一下還是一個(gè)很普遍的錯(cuò)誤,搗鼓了兩天終于搗鼓出一些東西,現(xiàn)分享給大家。 何謂 major.minor,且又居身于何處呢?先感性認(rèn)識(shí)并找到 major.minor 來(lái)。順便寫(xiě)一段 代碼,然后用 JDK 1.5 的編譯器編譯成class,用UltraEdit或者其他能打開(kāi)非十進(jìn)制文件的軟件打開(kāi)此class,見(jiàn)下圖: ![]() 從上圖中我們看出來(lái)了什么是 major.minor version 了,它相當(dāng)于一個(gè)軟件的主次版本號(hào),只是在這里是標(biāo)識(shí)的一個(gè) Java Class 的主版本號(hào)和次版本號(hào),同時(shí)我們看到 minor_version 為 0x0000,major_version 為 0x0031,轉(zhuǎn)換為十制數(shù)分別為0 和 49,即 major.minor 就是 49.0 了。 現(xiàn)在不妨從 JDK 1.1 到 JDK 1.7 編譯器編譯出的 class 的默認(rèn) minor.major version 吧。(又走到 Sun 的網(wǎng)站上翻騰出我從來(lái)都沒(méi)用過(guò)的古董來(lái))
當(dāng)然你也可以用其他方法查看版本號(hào),比如javap -verbose XXXX(class名)。 那么現(xiàn)在如果碰到這種問(wèn)題該知道如何解決了吧,還會(huì)像我所見(jiàn)到有些兄弟那樣,去找個(gè) 1.4 的 JDK 下載安裝,然后用其重新編譯所有的代碼嗎?且不說(shuō)這種方法的繁瑣,而且web應(yīng)用程序還不一定能成功,其實(shí)大可不必如此費(fèi)神,我們一定還記得 javac 還有個(gè) -target 參數(shù),對(duì)啦,可以繼續(xù)使用 1.5 JDK,編譯時(shí)帶上參數(shù) -target 1.4 -source 1.4 就 OK 啦,不過(guò)你一定要對(duì)哪些 API 是 1.5 JDK 加入進(jìn)來(lái)的了如指掌,不能你的 class 文件拿到 JVM 1.4 下就會(huì) method not found。目標(biāo) JVM 是 1.3 的話(huà),編譯選項(xiàng)就用 -target 1.3 -source 1.3 了。 相應(yīng)的如果使用 ant ,它的 javac 任務(wù)也可對(duì)應(yīng)的選擇 target 和 source
![]() 其實(shí)理解 major.minor 就像是我們可以這么想像,同樣是微軟件的程序,32 位的應(yīng)用程序不能拿到 16 位系統(tǒng)中執(zhí)行那樣。 |