Java API找出要为其编译类文件的JDK版本?

Prabhu R:

是否有任何Java API可以找出为类文件编译的JDK版本?当然有,找出主要版本中提到的javap的工具在这里但是我想以编程方式进行操作,以便可以警告用户针对适当的JDK进行编译

RealHowTo:
import java.io.*;

public class ClassVersionChecker {
    public static void main(String[] args) throws IOException {
        for (int i = 0; i < args.length; i++)
            checkClassVersion(args[i]);
    }

    private static void checkClassVersion(String filename)
        throws IOException
    {
        DataInputStream in = new DataInputStream
            (new FileInputStream(filename));

        int magic = in.readInt();
        if(magic != 0xcafebabe) {
            System.out.println(filename + " is not a valid class!");;
        }
        int minor = in.readUnsignedShort();
        int major = in.readUnsignedShort();
        System.out.println(filename + ": " + major + " . " + minor);
        in.close();
    }
}

可能的值为:

major  minor Java platform version 
45       3           1.0
45       3           1.1
46       0           1.2
47       0           1.3
48       0           1.4
49       0           5
50       0           6
51       0           7
52       0           8
53       0           9
54       0           10
55       0           11
56       0           12
57       0           13
58       0           14

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

与JDK 1.8的Java编译:不能访问类文件...类文件未找到

Java编译器如何查找类文件,而classpath未设置为jdk路径?

由更新版本的 Java Runtime (0.0) 编译的类,此版本的 Java Runtime 仅识别最高 52.0 的类文件版本

Java编译失败与jar文件的类路径

如何“反编译” Java类文件?

如何反编译Java类文件?

查找Java类文件版本之间的差异

使用产品口味时,是否需要为不同版本的应用程序分开Java文件?

如何找到已编译类的目标Java版本?

使用不同的Java版本编译软件包类

不同版本的Java和已编译的类jar

由较新版本的Java Runtime编译的Launch4j-FakeMain(类文件版本55 0)此Java Runtime仅识别最多52 0的类文件版本

ASM ClassReader无法解析类文件-可能是由于不支持的新Java类文件版本-我正在使用Apache 7和JDK 1.8

Java JDK,编译器版本与Java运行时不兼容

较新的JRE版本可以运行用较旧的JDK版本编译的Java程序吗?

“ JDK”的多个版本,要执行哪个“ java.exe”文件?

使用Java编译器API,而无需安装JDK

我如何知道使用哪个Java版本编译.class文件?

使用`lombok`注释和Java JDK 8在内存中编译Java类

JDK,JRE,Java:版本混淆!

如何找出在编译Java项目时实际使用的jar文件

在IntelliJ中编译Java内部类:类文件在哪里?

编译包含“Aux”类的 Java 文件时出错

无法让IntelliJ识别原始的已编译Java类文件

Eclipse不会将Java文件编译成类

Null在反编译的Java类文件中强制转换

编译单个Java文件

java类文件版本之间有什么区别

为什么Java类文件版本,从45开始?