2013-10-24 52 views
3

我的方法有返回類型,拋出NullPointerException我應該在使用throw的時候使用throw嗎?

public class Student { 
    public String studentOne() {  
     //code to get name 
     if(name == null) 
      throw new NullPointerException("Error"); 
     else 
      return name; 
    } 
} 

我的問題是..我應該使用public String studentOne throws NullPointerException而拋出新的異常嗎? P:我知道它不是最好的實踐來拋棄nullPointerException。但它在我的項目中需要

+3

P.S .:是什麼讓你說拋出空指針異常不是最佳做法?如果你有一個null,它不應該被允許,那麼NPE就好了。見例如http://thecodelesscode.com/case/115 –

+0

@LouisWasserman它可能是關於沒有明確地做'throw new NullPointerException ...',但我同意它本身沒有錯。 –

+0

這實際上應該是一個'IllegalStateException',IMO。 –

回答

6

NullPointerException是一個未經檢查的異常,所以你不需要,也不應該將其聲明爲拋出。您無需爲未檢查的例外這樣做。當然,如果你聲明它們,編譯器會忽略它們。

至於投擲NPE,它只是罰款,如果值爲null無法繼續進行該方法。但是,無論你明確地拋出它,它都不會有什麼區別,或者它在引發時被隱式拋出。只要你明確地拋出它就可以傳遞定製的消息。

當然,您可以在該方法中記錄此行爲,在某些情況下它會拋出NPE,以便讓用戶意識到這一點。

+3

這樣說,它肯定不會傷害到javadoc中的文檔,哪些情況會導致NPE被拋出。 –

+0

它在'拋出新的NullPointerException'和拋出時有什麼不同。在這兩種情況下控制權轉移到調用程序? – Vikram

+1

不管你是否聲明'throws',它都沒有什麼區別。 –

1

更好的辦法是文檔添加到方法

/** 
* @param name - not null. NullPointerExcpetion will thrown in case of null 
* 
* @return some string 
*/ 
public String studentOne(String name) 
{ 
    // ... 
}  

public String studentOne(String name) 

public String studentOne(String name) throw NullPointerException 

之間沒有區別,因爲NullPointerException是未經檢查的異常

+0

既然你實際上不打算使用拋出,使用javadoc標籤@throws是好的嗎?或者你應該包括作爲回報javadoc標籤? – Vikram

+0

@asvikki是的,'@扔'這不是一個更好的地方。我認爲'@ param'看起來不錯。或'@ exception'標籤 – Ilya