java - 在运行时获取 Java 版本

标签 java jvm

我需要解决 JDK 1.5 中的一个 Java 错误,该错误已在 1.6 中修复。我正在使用以下条件:

if (System.getProperty("java.version").startsWith("1.5.")) {
    ...
} else {
    ...
}

这是否适用于其他 JVM?有没有更好的方法来检查这个?

最佳答案

java.versionsystem property存在于每个 JVM 中。它有两种可能的格式:

  • Java 8 或更低版本:1.6.0_231.7.01.7.0_801.8.0_211
  • Java 9 或更高版本:9.0.111.0.41212.0.1

这里有一个提取主版本的技巧:如果是 1.x.y_z 版本字符串,则提取字符串索引 2 处的字符。如果是 x.y.z 版本字符串,则将字符串剪切为第一个点字符(如果存在)。

private static int getVersion() {
    String version = System.getProperty("java.version");
    if(version.startsWith("1.")) {
        version = version.substring(2, 3);
    } else {
        int dot = version.indexOf(".");
        if(dot != -1) { version = version.substring(0, dot); }
    } return Integer.parseInt(version);
}

现在您可以更轻松地查看版本:

if(getVersion() < 6) {
    // ...
}

关于java - 在运行时获取 Java 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591083/

相关文章:

java - 如何将 "unsigned"long 转换为 BigInteger

java - 有没有类似 NGen 的 JVM 预编译解决方案?

java - 使用 Sigar API 获取 JVM CPU 使用率

java - 当页面导航到其他页面时如何关闭 mac 中的 java 控制台?

java - com.ibm.jsse2.util 未找到可信证书

java - 如何让 NVDA 读取 Swing/GUI 元素

java - Kotlin 替代 javah

java.util.Scanner 对象在解析文本文件时抛出 NullPointerException

java - 让静态方法返回私有(private)类的设计决策背后的原因是什么?比如 Collections.synchronizedList()

java - Java native 接口(interface) (JNI) 的使用