class編譯jdk版本
❶ 如何查看java的class文件是被哪個版本的jdk編譯的
使用UE(Ultra Edit)打開.class文件,切換到16進制模式,查看第1行: CA FE BA BE 00 00 00 3200 75 07 00 02 01 00 27 ; ... .. 前8個位元組:CA FE BA BE 是固定的後面的4個位元組:00 00是次版本號次版本號後面的4個位元組:00 32是編譯源代碼的jdk版本號32(對應十進制的50):JDK1.631(對應十進制的49):JDK1.530(對應十進制的48):JDK1.42F(對應十進制的47):JDK1.3 2E(對應十進制的46):JDK1.2 編譯器的jdk版本是1.2 編譯器的jdk版本是1.6
❷ 如何查看Class文件編譯的JDK版本
查看class文件編譯的jdk版本步驟如下:
首先打開cmd命令行窗口,輸入如下指令:
❸ 怎麼看class文件的編譯版本
查看class文件編譯的jdk版本步驟如下:
首先打開cmd命令行窗口,輸入如下指令:
會輸出一些信息,大致如下:
Compiled from "HtmlCrawer.java"
public class org.eagleeye.html.HtmlCrawer extends java.lang.Object
SourceFile: "HtmlCrawer.java"
minor version: 0
major version: 50//這個便是jdk的版本信息。
❹ 如何查看Class文件編譯的JDK版本
在jar包中,用winrar解壓一個類文件,然後在命令行下面輸入
javap -verbose classname
會輸出一些信息,大致如下:
Compiled from "HtmlCrawer.java"
public class org.eagleeye.html.HtmlCrawer extends java.lang.Object
SourceFile: "HtmlCrawer.java"
minor version: 0
major version: 50
Constant pool:
const #1 = class #2; // org/eagleeye/html/HtmlCrawer
const #2 = Asciz org/eagleeye/html/HtmlCrawer;
const #3 = class #4; // java/lang/Object
const #4 = Asciz java/lang/Object;
const #5 = Asciz client;
....
後面省略了,可以看到前面有兩行:
minor version: 0
major version: 50
表示了類文件的版本
❺ 如何查看Class文件編譯的JDK版本
由於JDK一般是向下兼容的,所以有時候本地的JDK版本比類庫的版本低,往往會拋出java.lang.UnsupportedClassVersionError: Bad version number in .class file。
有時候需要確認到底是哪個類的版本低。所以需要確認類的編譯JDK的版本。
可用二進制編輯工具(例如EmEditor)打開類文件,會有以下的顯示:
CA FE BA BE 00 00 00 32.....
而上面的32是編譯這個類的JDK版本,32表示是50,是JDK1.6;31表示49,是JDK1.5;30表示48,是JDK1.4......依次類推。
如編譯上面的類的JDK為JDK1.6。所以你在環境是JDK1.6以下的引用這個類,就會拋出版本不對的異常。
❻ 如何查看Class文件編譯的JDK版本
准備好要查看的class文件,本例使用Tools.class文件。
如何查看class文件的jdk版本
使用Ultra Edit打開class文件
如何查看class文件的jdk版本
如果顯示效果如下圖一樣,則表示默認使用的是16進制方式顯示。
如何查看class文件的jdk版本
如果不是16進制方式,則顯示為下圖的亂碼樣式。此時需要點擊菜單上的【切換為十六進制編輯模式】
如何查看class文件的jdk版本
只看第一行的數據:
(1)前面8個位元組CA FE BA BE是固定的。
(2)隨後4個位元組00 00是次版本號
(3)再後面的4個位元組00 34是JDK的版本號(JDK1.8)。
JDK版本號對應關系如下:
34(對應十進制的50):JDK1.8
33(對應十進制的50):JDK1.7
32(對應十進制的50):JDK1.6
詳細見第5步.......
如何查看class文件的jdk版本
詳細的JDK版本對應關系:
34(對應十進制的50):JDK1.8
33(對應十進制的50):JDK1.7
32(對應十進制的50):JDK1.6
31(對應十進制的49):JDK1.5
30(對應十進制的48):JDK1.4
2F(對應十進制的47):JDK1.3
2E(對應十進制的46):JDK1.2
❼ 怎麼知道Java class文件JDK編譯的版本號
首先用一些二進制查看器打開class文件,比如od或者hexmp工具。
od -x hello.class
或者
hexmp hello.class
我們會看到類似於下面的輸出:
feca beba 0000 3300
這里我們看到前四個位元組是Java class的特殊符號,叫做magic欄位,用來告訴JVM這是個class文件,之後的兩個位元組是minor版本號,再之後的兩個位元組是major版本號,我們看到時33,對應下表我們知道33時JDK1.7編譯的版本號。
十六進制
JDK1.5 31
JDK1.6 32
JDK1.7 33
JDK8 34
因為Java是向後兼容的,所以高版本的兼容低版本的,所以有時候你遇到java報: unsupported major.minor version 51,那就是你用低版本的虛擬機去運行高版本JDK編譯的class文件了,所以低版本的虛擬機就抱怨了。這里的51是十進制,也就是十六進制的33,及對應JDK1.7,如果出現這種錯誤,你肯定是使用低於1.7版本的虛擬機去運行這個了。