日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 编译器获得型号_关于编译器构造:如何找到已编译类的目标Java版本?

發布時間:2025/4/5 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 编译器获得型号_关于编译器构造:如何找到已编译类的目标Java版本? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

重復:

Tool to read and display Java .class versions

如果我有一個已編譯的Java類,是否可以僅從類文件中得知其目標版本兼容性是什么? 具體來說,我有許多編譯為Java 6的類文件,它們在Java 5下運行,并顯示"無法識別的版本"錯誤。 我希望能夠在不運行JVM的情況下查看類文件并查找其目標版本兼容性。 有任何想法嗎?

...,當然,如果您愿意使用終端,文件實用程序也將包含在MacOS中。

您可以使用標準JDK隨附的javap實用程序。

javap -verbose MyClass

Compiled from"MyClass.java"

public class MyClass extends java.lang.Object

SourceFile:"MyClass.java"

minor version: 3

major version: 45

盡管它可能被認為是"更好"的,但這并不是我一直在尋找的東西。

使用文件程序(在大多數GNU / unix系統上)可以實現相同的結果:文件Foo.class Foo.class:編譯的Java類數據,版本45.3 BTW:如何編譯以產生此輸出(45.3),即.45 jdk1。 x或j2me?

在Wikipedia上有關Java類文件的文章中,有一個主版本號表(例如主版本51 = Java 1.7等)。

可以使用" javap -version target.class"轉儲確切的版本

我已經在網上找到了它并且可以使用。

Every '.class' file starts off with

the following:

Magic Number [4 bytes]

Version Information [4 bytes]

A hexdump of a '.class' file compiled

with each of the following options

reveals:

javac -target 1.1 ==> CA FE BA BE 00 03 00 2D

javac -target 1.2 ==> CA FE BA BE 00 00 00 2E

javac -target 1.3 ==> CA FE BA BE 00 00 00 2F

javac -target 1.4 ==> CA FE BA BE 00 00 00 30

Perhaps you could use this information

to write your own '.class' file

version checking utility, using Java,

or perhaps a scripting or shell

language ;) !

I hope this helps.

Anthony Borla

來自:http://bytes.com/groups/java/16603-how-determine-java-bytecode-version

太好了,但是我關心的1.5和1.6版本呢?

好像最后一個數字代表最終版本,十六進制31 = dec 49十六進制32 = dec50。那就是我所需要的。 謝謝。

版本1.6 = 32,而1.5為31

我發現這里提供的答案更具啟發性。

javap -verbose MyClass =>主要版本49(十進制)= Java 1.5,50 = Java 1.6,51 = Java 1.7,52 = Java 1.8。

Linux / Unix用戶在標準工具箱中有一個不錯的工具:file實用程序。 現代版本可以檢測Java類fersion版本,甚至可以輸出已知類文件類型的Java版本。

輸出示例:

com/sample/Tracker.class: compiled Java class data, version 45.3

com/sample/TestListener.class: compiled Java class data, version 49.0 (Java 1.5)

它非常適合標準Unix腳本工具鏈。

摘自:http://twit88.com/blog/2008/09/22/java-check-class-version/

try {

String filename ="C:\\MyClass.class";

DataInputStream in = new DataInputStream(new FileInputStream(filename));

int magic = in.readInt();

if (magic != 0xcafebabe) {

log.info(filename +" is not a valid class!");

}

int minor = in.readUnsignedShort();

int major = in.readUnsignedShort();

log.info(filename +":" + major +" ." + minor);

in.close();

} catch (IOException e) {

log.info("Exception:" + e.getMessage(), e);

}

您可以查看文件中的字節偏移6和7(可能在十六進制轉儲中),它告訴您使用哪個版本。 我認為Bytecode Visualizer(eclipse插件)可以查看為類文件創建的版本。

進一步閱讀

總結

以上是生活随笔為你收集整理的java 编译器获得型号_关于编译器构造:如何找到已编译类的目标Java版本?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。