如何从Java代码中了解JDK版本

27

如何在Java代码中获取JDK版本

4个回答

50

我猜你指的只是Java的版本,如果是的话,请尝试以下代码:

String version = System.getProperty("java.version");

5

自Java 9以来

System.out.println(Runtime.version());

打印类似于17.0.2+8-86的内容

或者如果需要更多

System.out.println("Java Feature Version = " + Runtime.version().feature());
System.out.println("Java Interim Version = " + Runtime.version().interim());
System.out.println("Java Update Version = " + Runtime.version().update());
System.out.println("Java Version Build = " + Runtime.version().build().map(String::valueOf).orElse("Unknown"));
System.out.println("Java Version Pre-Release Info = " + Runtime.version().pre().orElse("N/A"));

打印

Java Feature Version = 17
Java Interim Version = 0
Java Update Version = 2
Java Version Build = 8
Java Version Pre-Release Info = N/A

4

仅仅依靠java.version字符串来展示给人看以外的任何用途都是脆弱的,如果在另一个Java实现上运行,它将会出错。

唯一可靠的编程方式是使用反射仔细地询问给定设施是否可用,然后相应地选择适当的代码。


1
你能举个例子说明这种情况会失败吗? - Jesse Barnum
@ Jesse,我宁愿换个角度。你会为分析java.version字符串设置什么规则? - Thorbjørn Ravn Andersen
1
@Jesse,我之前不知道这个属性。然而,在快速查看JLS时,我并没有发现它保证存在且包含有效数字。也许你知道在哪里可以找到相关信息? - Thorbjørn Ravn Andersen
1
@Jesse,这里的关键问题是它是否仅适用于基于Hotspot的JVM。我无法立即确定。 - Thorbjørn Ravn Andersen
2
不要像@JesseBarnum一样使用Float.valueOf。这对我失败了,因为由于舍入误差,1.8>=1.8对我返回了false。请改用.compareTo("1.8")>=0 - Mark Jeronimus
显示剩余8条评论

0
如果您需要知道位版本(32位或64位),并且正在运行HotSpot JVM,则可以尝试此代码:

System.getProperty("sun.arch.data.model")

不能保证它适用于除HotSpot之外的其他Java实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接