2012-08-14 51 views
0

我在Java中偶然發現了這個奇怪的事情。編碼時,我不小心忘了實例化Map。在將數據放入它的過程中,一切都沒有錯誤,但是在得到它們時,我得到了明顯的NullPointerException。這裏是我使用的代碼片段:把數據放入null地圖

public class Loader { 
    private static Map<String, Object> map; 
    public static load() { 
     //... 
     // read lines and put them into map 
     map.put(line, new Object()); // <-- NO ERROR 
     //... 
    } 

    public static parse(){ 
     //... 
     for(...){ 
      map.get(key); //<-- ERROR on map (NullPointerException) 
     } 
     //... 
    } 
} 

提供的代碼是存根,主要目的是演示奇怪的地圖行爲。那麼爲什麼有可能插入數據爲空? 我正在使用Java * 1.6.0_29 *。

請注意這段代碼是完整的,map不會在其他地方初始化;代碼是完整的。

+6

或者a)當你到達'map.put'時,你的映射不爲null或者b)你永遠不會執行那條線。 – assylias 2012-08-14 13:02:32

+4

爲什麼你認爲你的'load'方法曾被稱爲? – Roman 2012-08-14 13:03:07

+0

如果你試圖在'map.put'和'map.get'之前和之後的'sysout'地圖呢? – 2012-08-14 13:05:14

回答

0

我覺得啞巴。正如@assylias所指出的那樣,放置發生的代碼永遠不會執行。這是非常深刻的 - 每個週期,由於之前的錯誤而沒有執行。我感到慚愧。

0

簡而言之,你不能這樣做。我懷疑在map.put()期間拋出的異常是在某處吞噬了,而你沒有看到它。

例如

try { 
    (new Loader).load(); 
} 
catch (Exception e) { 
    // swallowed with no info here 
} 
0

此代碼不完整...或者,您正在運行代碼的以前編譯版本。

0

它可能是您使用的IDE或JDK的問題,或者它可能是您的代碼,因爲當我試圖複製您的案例時,在編譯時引發java.lang.Error異常,變量映射未初始化。

0

「map」被實例化或「put」行無法訪問。