Java VM如何确定user.dir系统属性的值?

Vic*_*cky 5 java eclipse

我正在运行一个简单的Java程序,其目录结构如下:

MyProject (A project in my Eclipse IDE)
 '-- src
      '-- Hello.java
Run Code Online (Sandbox Code Playgroud)

在Hello.java中,我打印'user.dir'系统属性的值.

System.out.println(System.getProperty("user.dir"));
Run Code Online (Sandbox Code Playgroud)

我班的编译文件存储在MyProject\bin文件夹中.

当我从Eclipse运行此类时(右键单击源文件并单击Run As-> Java Application),它会将路径打印到"MyProject"文件夹,即D:\Projects\Workspace\MyProject在控制台窗口中.

然后我使用命令窗口运行相同的程序.这是我在窗口上输入的内容:

D:\Projects\Workspace\MyProject\bin>java Hello
Run Code Online (Sandbox Code Playgroud)

和控制台上的输出是: D:\Projects\Workspace\MyProject\bin

bin 已添加到user.dir的先前值.

此外,为了检查更多,我这次在命令窗口的不同文件夹中执行了Java命令:

D:\Projects\Workspace\MyProject>java -classpath D:\Projects\Workspace\MyProject\bin Hello
Run Code Online (Sandbox Code Playgroud)

命令窗口的输出时间为: D:\Projects\Workspace\MyProject

当我在命令窗口中更改文件夹时,此值会更改,当我从Eclipse运行程序时,user.dir的值是项目文件夹.所以我想了解,推导'user.dir'价值的基础是什么?JVM如何决定user.dir的值应该是什么?

Grz*_*zki 9

根据java.lang.System规范user.dir定义,属性返回当前工作目录(即启动JVM时的当前目录):

user.dir 用户当前的工作目录

我看到你的例子中没有任何矛盾.这里唯一不清楚的是该物业的名称.我不明白为什么他们选择把"用户"放在那里.

同样,如果您从完全不同的路径执行相同的Java程序,您将获得另一条路径作为结果.自己尝试一下:

 c:
 cd c:\
 java -cp D:\Projects\Workspace\MyProject\bin Hello
Run Code Online (Sandbox Code Playgroud)

Eclipse在运行程序之前所做的事情类似于:

 d:
 cd d:\projects\workspace\myproject
 java -cp d:\projects\workspace\myproject\bin Hello
Run Code Online (Sandbox Code Playgroud)