2011-05-05 63 views
1

假設的方法:布爾函數失敗時返回什麼?

public boolean setAttribute(){ 
    boolean returnval = false; 
    object = this.getObject;      //suppose this returns null 
    for(Object obj : object.getObjectsForLoop()){ //<== this will fail 
    doSomething(); 
    returnval = true; 
    } 
    return returnval; 
} 

現在,假設這是其他地方調用,在過程中。這種方法會在第四行失敗並且不會返回任何內容嗎?

+1

當你嘗試時發生了什麼? – 2011-05-05 13:00:56

+0

當我嘗試它時,它會拋出一個空指針異常。我想知道是否有可能繼續下去。 – davidahines 2011-05-05 13:21:39

回答

4

如果無法返回一個有效的對象:

object = this.getObject; 

這將不會返回任何東西。它會拋出一個NullPointerException:

for(Object obj : object.getObjectsForLoop()){ 
1

這將導致NullPointerException因爲for將嘗試從null對象獲得的迭代器。

+0

對。人們不會期望這樣的命名,考慮到Java沒有指針的事實:) – Xion 2011-05-05 13:02:28

2

該方法將突然以NullPointerException完成。換句話說:它不會返回任何東西。

+1

突然完成包括任何中斷正常流程的事情。這包括拋出的異常,break語句,continue語句,甚至返回語句。 – 2011-05-05 12:56:49

+0

@Nathan:有趣。我鏈接到的JLS部分說:「突然完成總是有一個相關的*理由*,它總是一個具有給定值的」throw「。」但[§14.17](http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.17)表示「[return]聲明總是突然完成」。我編輯了我的答案以刪除錯誤信息。 – 2011-05-05 13:07:23

+0

@Nathan:我現在看到我被誤導的地方:[§15.6](http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#79448)(我曾經引用過)只能**評估表達式(只能用'throw'突然結束而沒有其他理由)**。 – 2011-05-05 13:09:26

1

取決於你失敗的意思。在你的情況下,它看起來像你的意思是throws NullPointerException。在這種情況下,setAttribute的調用者也會得到NullPointerException。如果你不在任何地方處理NullPointerException,這將會把堆棧中的所有內容都放回到main並終止你的程序。如果你處理NullPointerException,catch塊將被調用。

2

如果object爲null,則在迭代器中使用它將觸發NullPointerException - 這就是您將得到的結果。