2012-07-25 212 views
0

當一個方法拋出和異常,我們是否需要在該方法內有一個try塊?投擲Java異常

例如,

public void foo() throws SomeException{ 
     try{ 
      // content of method 
     } 
    } 

是try塊所需?或者說,是能夠拋出SomeException沒有它的方法:

public void foo() throws SomeException{ 
      // content of method 
    } 

這樣的話,當我們明確地拋出一個SomeException與

回答

3

如果SomeException檢查的異常必須要麼

  • 使用try{}catch
  • 宣告你的方法把它扔了。

你不必同時做這兩件事,你在問題中展示的例子都可以正常工作。

不同的是,與try子句通過聲明自己處理SomeException,而你自己的方法throws它,你委託的處理SomeException調用方法的責任。

0

當一個方法拋出一個異常時,它負責處理其調用者的異常。 所以你不需要處理異常,如果你把它放在簽名中。如下所示。

public void foo(){ 
     try{ 
      // content of method 
     } 
    } 

但是如果你這樣寫的話。

public void foo() throws SomeException{ 

    } 

你會打電話給你的方法,如下所示。

try{ 

    foo(); 
} 
0

如果我們從程序throws an Exception打電話,那麼我們就需要使用try/catch周圍的方法調用的方法。

2.假設我們正在編寫throws an exception那麼我們就需要throw new Exception object從withing方法的方法。

3.異常是異常類型爲的對象。我們有Checked ExceptionUnchecked Exception (Runtime Exception)

0

你不需要try塊。

public void foo() throws SomeException { 
    // do some stuff 
    // you decide to throw the exception by yourself: 
    if (throwAnException) throw new SomeException(); 
    // or you call a method that throws SomeExpection: 
    methodThatCanThrowSomeException(); 
    // do more stuff 
} 

只要你在你的簽名中聲明它,你完全沒問題。你的方法的調用者必須處理這個異常,而不是你。所以一個來電者可能會這樣做:

try { 
    foo(); 
} catch (SomeException e) { 
    // handle exception 
} 

或者他可能會進一步通過它自己。

0

您經常遇到的問題最多的情況是調用一個聲明檢查異常的方法。在絕大多數實際案例中,不適合在現場處理該異常,但讓它向上傳播。不幸的是,Java會讓你重新聲明這個相同的異常,這會造成混亂,暴露實現細節,並且經常會打破現有方法的契約。

在這種情況下進行的方式是包裝和重新拋出

catch (RuntimeException e) {throw e;} catch (Exception e) {throw new RuntimeException(e);} 
+0

那不是他問,但這是一個非常有趣的技術。謝謝 ;) – brimborium 2012-07-25 10:17:44

0

你沒有本質上需要有一個try塊在它

​​