2010-02-17 49 views
2

我在監視一些服務器日誌,並且有不少NullPointerExceptions。日誌包含堆棧跟蹤和原因getCause爲什麼空指針異常對象有一個空的原因字段?

問題是這些NPE不包含原因。在JavaDocs中,它表示當不存在或未知時(不是很有幫助),原因爲空。

所以我的問題是,有人遇到這些「不起眼的」NPE?如果是這樣,那是哪種情況下的問題?我有點迷失在這裏,所以任何洞察力將不勝感激。

+3

NPE幾乎*從不*包含原因,因爲它們不是其他例外的影響! – 2010-02-17 17:30:54

回答

4

NPE從來不會有原因,因爲它們在嘗試訪問空對象引用時由JVM生成。堆棧跟蹤應該有關於它發生的行的信息。

+0

謝謝,我可能與其他類型的例外混淆。我在堆棧跟蹤中看到的信息雖然缺乏,但並不是因爲原因(如你所說)。 – 2010-02-17 17:38:45

+0

永遠不要說永遠。這是可能的(儘管當然是一個可怕的想法)手動創建一個NPE initCause然後拋出它。 – 2010-02-17 17:41:56

+0

@Matt我肯定不會那樣:) – 2010-02-17 17:44:20

3

NullPointerException的原因通常從堆棧跟蹤很清楚。你看看它發生的那一行,並觀察那裏可能是空的。沒有其他原因(因爲這是由NullPointerException包裝的不同異常)。

如果NullPointerException沒有堆棧跟蹤,那可能發生並且是一個更難診斷的問題,但是如果我理解您的問題,則不是這裏的情況。