Java openJDK版本号-这些是宏吗?:$MAJOR.$MINOR.$SECURITY。如何访问这些文件?

Java openJDK版本号-这些是宏吗?:$MAJOR.$MINOR.$SECURITY。如何访问这些文件?,java,macros,version,versioning,Java,Macros,Version,Versioning,在这里讨论的是版本号。对于这些看起来像宏观的东西是什么,我在那里或其他任何地方都找不到任何解释。例如,在什么上下文中使用“$VNUM”?它的范围是什么?是否在OpenJDK编译中使用的C++头文件中定义?它可以从我的java程序中访问吗?它是某种环境变量吗 感谢您的解释。名称后面的$是在Unix shell脚本和命令行提示中使用变量的标准方法。您链接到的JEP实际上并不是指Unix命令,而是使用该语法来指示某些值的排列方式 如果您现在在Linux或OS X中打开一个终端,您可以输入如下内容来查看

在这里讨论的是版本号。对于这些看起来像宏观的东西是什么,我在那里或其他任何地方都找不到任何解释。例如,在什么上下文中使用“$VNUM”?它的范围是什么?是否在OpenJDK编译中使用的C++头文件中定义?它可以从我的java程序中访问吗?它是某种环境变量吗


感谢您的解释。

名称后面的
$
是在Unix shell脚本和命令行提示中使用变量的标准方法。您链接到的JEP实际上并不是指Unix命令,而是使用该语法来指示某些值的排列方式

如果您现在在Linux或OS X中打开一个终端,您可以输入如下内容来查看变量替换的工作原理:

MAJOR=11
小调=0
安全=3
回声$主要。$次要。$安全
作者可以使用Java语法来描述它,比如
major+“+minor+”“+security
,或者可以使用类似BNF的符号来描述它,但是选择了这种方式

版本元素由类的实例使用。您可以使用该方法获取当前运行的JVM的实例

你为什么要看它?解决特定版本中的已知错误,或在可用时使用较新的API

如果希望获得JEP描述为
$VNUM
的值,您可以编写:

String vnum = Runtime.version().version().stream().map(Object::toString).collect(
    Collectors.joining("."));
…将主要/次要/安全编号(实际上不再称为主要/次要/安全编号)与介于两者之间的句点连接起来

但是,通常情况下,您不需要该字符串。您更有可能比较版本,以测试特定的bug或功能:

Runtime.Version requiredVersion = Runtime.Version.parse("11");

if (Runtime.version().compareTo(requiredVersion) < 0) {
    System.err.println("This program requires Java 11 or later.");
    System.exit(1);
}
Runtime.Version requiredVersion=Runtime.Version.parse(“11”);
if(Runtime.version().compareTo(requiredVersion)<0){
System.err.println(“此程序需要Java11或更高版本。”);
系统出口(1);
}