系统属性,需要证明

时间:2014-03-05 15:11:38

标签: java

3. import java.util.*;
4. public class Values {
5. public static void main(String[] args) {
6. Properties p = System.getProperties();
7. p.setProperty("myProp", "myValue");
8. System.out.print(p.getProperty("cmdProp") + " ");
9. System.out.print(p.getProperty("myProp") + " ");
10. System.out.print(p.getProperty("noProp") + " ");
11. p.setProperty("cmdProp", "newValue");
12. System.out.println(p.getProperty("cmdProp"));
13. }
14. }

给定命令行调用:

java -DcmdProp=cmdValue Values 

结果是什么?

一个。 null myValue null null

B中。 cmdValue null null cmdValue

℃。 cmdValue null null newValue

d。 cmdValue myValue null cmdValue

电子。 cmdValue myValue null newValue

F。在运行时抛出异常

这个问题来自SCJP,答案是“E”。但据我说,答案应该是D,因为当我们从命令行提示符调用时,我们设置“cmdProp”=“cmdValue”的值。因此,在第12行,为什么它给出与键cmdProp相对应的newValue。

3 个答案:

答案 0 :(得分:1)

代码的第11行更改了从命令行提示符定义的变量值。这种“覆盖”导致变量的变化。

答案 1 :(得分:0)

执行第6行后,您处理的只是一个支持Properties实例的简单映射。实际上,您不是在处理系统属性。因此,在第11行,您在地图中设置了一个条目,在第12行,您读取了刚刚修改过的条目的新值。

答案 2 :(得分:0)

由于在第二次输出之前从代码中设置了cmdProp:

11. p.setProperty("cmdProp", "newValue");
12. System.out.println(p.getProperty("cmdProp"));