用javap查看編譯版本

用javap查看編譯版本

我們可以用javap命令查看class文件的編譯版本。
比如對Worke.class使用javap命令:javap -verbose Worker
我將看到Worker的反編譯結果。其中前幾行如下:
Compiled from "Worker.java"
public class com.teleca.robin.Worker extends java.lang.Thread
  SourceFile: "Worker.java"
  minor version: 0
  major version: 49
  Constant pool:
上面的minor version: 0和major version: 49就是編譯Worke.class時使用的jdk編譯版本號。
但是它並不是我們所熟悉的jdk版本號(比如jdk1.5)。
不過我們可以把從 JDK 1.1 到 JDK 1.7 編譯器編譯出的 class 的默認 minor.major version 彙總下就知道對應關係了。
JDK 編譯器版本 target 參數 十六進制 minor.major 十進制 minor.major
jdk1.1.8 不能帶 target 參數 00 03 00 2D 45.3
jdk1.2.2 不帶(默認爲 -target 1.1) 00 03 00 2D 45.3
jdk1.2.2 -target 1.2 00 00   00 2E 46.0
jdk1.3.1_19 不帶(默認爲 -target 1.1) 00 03 00 2D 45.3
jdk1.3.1_19 -target 1.3 00 00   00 2F 47.0
j2sdk1.4.2_10 不帶(默認爲 -target 1.2) 00 00   00 2E 46.0
j2sdk1.4.2_10 -target 1.4 00 00   00 30 48.0
jdk1.5.0_11 不帶(默認爲 -target 1.5) 00 00   00 31 49.0
jdk1.5.0_11 -target 1.4 -source 1.4 00 00   00 30 48.0
jdk1.6.0_01 不帶(默認爲 -target 1.6) 00 00   00 32 50.0
jdk1.6.0_01 -target 1.5 00 00   00 31 49.0
jdk1.6.0_01 -target 1.4 -source 1.4 00 00   00 30 48.0
jdk1.7.0 不帶(默認爲 -target 1.6) 00 00   00 32 50.0
jdk1.7.0 -target 1.7 00 00   00 33 51.0
jdk1.7.0 -target 1.4 -source 1.4 00 00   00 30 48.0
Apache Harmony 5.0M3 不帶(默認爲 -target 1.2) 00 00   00 2E 46.0
Apache Harmony 5.0M3 -target 1.4 00 00   00 30 48.0
注1:javac 有個 -target 參數,編譯時可以通過target參數來設置編譯時所使用的jdk版本。比如如果目標 JVM 是 1.3 的話,編譯選項就可以用 -target 1.3 -source 1.3 了。
相應的如果使用 ant ,編譯時可以通過target參數來設置編譯時所使用的jdk版本。比如:
<javac target="1.4" source="1.4" ............................/>
注2:javac中source和target 的意義
-source <版本>                              提供與指定版本的源兼容性
-target <版本>                               生成特定 VM 版本的類文件
source纔是真正的指明代碼的兼容性,target則是指定了生成class的格式的版本號,即生成特定 VM 版本的類文件。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章