2012-02-07 99 views
4

下列行可能返回null嗎?什麼情況導致對象實例化返回null?

MyClass obj = new MyClass(); 

如果是這樣,什麼樣的條件會導致返回值null?

+0

我對這個問題的提示感到困惑。 – 2012-02-07 21:17:26

+0

@KevinD這聽起來像是一個Java認證考試問題。 – 2012-02-07 22:14:00

回答

16

假設虛擬機運行正常,new不可能返回null。

section 15.9.4 of the Java Language Specification

一個類的實例創建表達式的值是將指定的類的新創建的對象的引用。每次評估表達式時,都會創建一個新對象。

0

在我看來這是不可能的。如果你以某種方式在Java中使用內存不足,你將會得到異常(OutOfMemoryError)。

3

靜態初始化錯誤

public class MyClass { 

static { 
    throw new Error("Error"); 
} 

} 

public class MyClass2 { 

    static MyClass test=new MyClass(); 

} 

你不能沒有指定上下文問你的問題。在應用程序服務器中,上面的代碼將使用test = null來創建Myclass2。 爲什麼?因爲錯誤通常被應用程序服務器困住。

+0

你可以用代碼擴展答案嗎? – 2012-02-07 21:10:51

1

簡答題 - NO。

但是你可以從構造函數拋出一個異常,在這種情況下,如果obj最初被分配到null,它仍將null

6

不,這不能返回null。但是,它可能會引發異常,並且取決於您如何處理該異常,在處理異常後obj引用可能仍然爲空(如果您離開代碼塊,例如通過不捕獲該異常,則obj引用將不再存在因此它沒關係)。

原因在構造函數中的異常是多方面的,例如,如果您運行的內存(在這種情況下,你會得到一個OutOfMemoryError),或者如果你訪問一個未初始化的字段,它仍然是空,將導致NullPointerException

相關問題