我注意到在Windows上的Java环境(通过System.getenv()调用获取)包括一些在实际环境中不存在的变量。这些变量以等号和“=ExitCode”开头,其中“=ExitCode”对应于刚刚运行的进程的退出代码;各个驱动器字母的默认目录,如“=C:”、“=D:”。似乎所有版本的Sun Java都是如此,在所有Windows版本上运行。这是否有任何文档记录,或者仅供Sun内部使用?
编辑: 这里有一个简单的示例应用程序,展示了我的意思。在命令行上编译并运行它:
编辑: 这里有一个简单的示例应用程序,展示了我的意思。在命令行上编译并运行它:
import java.util.Map;
class ShowEnv {
public static void main(String[] args) {
for (Map.Entry v : System.getenv().entrySet())
System.out.printf("%-23s= %.54s%n", v.getKey(), v.getValue());
}
}
然后使用SET命令(来自cmd.exe)或类似的用C编写的命令行程序,比较变量。你会发现以=开头的变量在这些命令中不存在:
=ExitCode = 00000000 =:: = ::\ =C: = C:\Temp
显然,这些变量是在JVM执行期间添加的。