2014-03-05 53 views
0
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 

結果是什麼?

A.空myvalue的空空

B. cmdValue空空cmdValue

C. cmdValue空空NEWVALUE

D. cmdValue myvalue的空cmdValue

E. cmdValue myvalue的空NEWVALUE

F.運行時拋出異常

這個問題來自SCJP,答案是「E」。但據我看,答案應該是D,因爲當我們從命令行提示符調用時,我們設置「cmdProp」=「cmdValue」的值。所以,在第12行,爲什麼它給出了與關鍵cmdProp相對應的newValue。

+4

由於線11! – assylias

回答

1

第11行代碼更改從命令行提示符定義的變量的值。這種「重寫」導致變量的改變。

0

在執行第6行之後,您處理的所有內容都是支持Properties實例的簡單映射。實際上,你不處理系統屬性。因此,在第11行中,您在地圖中設置了一個條目,在第12行,您讀取了剛剛修改的條目的新值。

0

因爲從代碼中設置CMDPROP的只是outputing它第二次前:

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