本Java教程是针对JDK 8编写的。本页中描述的示例和实践未充分利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改以获取Java SE 9及其后续版本中更新的语言特性摘要。
请参阅JDK发行说明以获取有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
许多操作系统使用环境变量将配置信息传递给应用程序。与Java平台中的属性一样,环境变量是键/值对,其中键和值都是字符串。设置和使用环境变量的约定在操作系统之间以及命令行解释器之间各不相同。要了解如何将环境变量传递给您的系统上的应用程序,请参阅系统文档。
在Java平台上,应用程序使用System.getenv
来检索环境变量的值。没有参数,getenv
返回一个只读的java.util.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
。示例
以这种方式使用Env
getenv
查询特定的环境变量,命令行上指定:
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未被赋值。%n", env); } } } }
当Java应用程序使用ProcessBuilder
对象创建新进程时,传递给新进程的默认环境变量集是提供给应用程序的虚拟机进程的相同集合。应用程序可以使用ProcessBuilder.environment
更改此集合。
在不同系统上,环境变量的实现方式存在许多微妙的差异。例如,Windows在环境变量名称中忽略大小写,而UNIX则不会。环境变量的使用方式也各不相同。例如,Windows在一个名为USERNAME
的环境变量中提供用户名,而UNIX实现可能在USER
、LOGNAME
或两者中提供用户名。
为了最大限度地提高可移植性,在系统属性中提供相同值时,永远不要引用环境变量。例如,如果操作系统提供了用户名,它将始终在系统属性user.name
中可用。