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。
答案 0 :(得分:1)
代码的第11行更改了从命令行提示符定义的变量值。这种“覆盖”导致变量的变化。
答案 1 :(得分:0)
执行第6行后,您处理的只是一个支持Properties
实例的简单映射。实际上,您不是在处理系统属性。因此,在第11行,您在地图中设置了一个条目,在第12行,您读取了刚刚修改过的条目的新值。
答案 2 :(得分:0)
由于在第二次输出之前从代码中设置了cmdProp:
11. p.setProperty("cmdProp", "newValue");
12. System.out.println(p.getProperty("cmdProp"));