Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
许多操作系统使用 environment variables (环境变量) 将配置信息传递给应用程序。与 Java 平台中的属性一样,环境变量是键/值对,其中键和值都是字符串。设置和使用环境变量的规范因操作系统和命令行解释器之间而异。要了解如何将环境变量传递给系统上的应用程序,请参阅系统文档。
在 Java 平台上,应用程序使用 System.getenv 来获取环境变量值。如果没有参数,getenv 将返回 java.util.Map 的只读实例,其中 map 的键是环境变量名称,map 的值是环境变量值。这在 示例中进行了演示:EnvMap
import java.util.Map;
public class EnvMap {
public static void main (String[] args) {
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n",
envName,
env.get(envName));
}
}
}
使用 String 参数,getenv 返回指定变量的值。如果未定义变量,getenv 将返回 null。 示例使用 Envgetenv 以查询命令行中指定的特定环境变量:
public class Env {
public static void main (String[] args) {
for (String env: args) {
String value = System.getenv(env);
if (value != null) {
System.out.format("%s=%s%n",
env, value);
} else {
System.out.format("%s is"
+ " not assigned.%n", env);
}
}
}
}
当 Java 应用程序使用 ProcessBuilder 对象创建新进程时,传递给新进程的默认环境变量集与提供给应用程序虚拟机进程的集相同。应用程序可以使用 ProcessBuilder.environment 更改此集。
在不同系统上实现环境变量的方式之间存在许多细微差别。例如,Windows 忽略环境变量名称中的大小写,而 UNIX 则不会。使用环境变量的方式也各不相同。例如,Windows 在名为 USERNAME 的环境变量中提供用户名,而 UNIX 实现可能在 USER,LOGNAME 或两者中提供用户名。
为了最大化可移植性,当系统属性中的相同值可用时,请不要引用环境变量。例如,如果操作系统提供用户名,则它将始终在系统属性 user.name 中可用。