用throws拋出異常與用try..catch..捕獲異常有什么不同


舉個例子
public class A
{
public void method1 throws Excetpion
{
//可能有一個SQLException
}
}
//調用類捕獲異常
public class B
{
private A a;
try
{
a.method1();
}
catch(Exception e)
{
System.out.println(e);
}

}

異常處理的原則

1、如果無法處理某個異常,那就不要捕獲它。
2、如果捕獲了一個異常,請不要胡亂處理它。
3、盡量在靠近異常被拋出的地方捕獲異常。
4、在捕獲異常的地方將它記錄到日志中,除非您打算將它重新拋出。
5、按照您的異常處理必須多精細來構造您的方法。
6、需要用幾種類型的異常就用幾種,尤其是對於應用程序異常。    

java異常可以分成兩大類:Exception和RuntimeException(雖然RuntimeException是從Exception繼承的)。exception異常代表“無法避免的異常” 如io異常 往往這類異常是由於外部原因造成的,程序本身無法保證他們不發生,所以這類異常必須捕獲。如果在函數內部無法處理這個異常必須再次拋出(在函數后面用throws語句),如果什么都不做就出現編譯錯誤。
runtimexception是指“可以避免的異常”,如 null引用異常,這類異常都是由程序內部原因造成的,是可以避免的。對於這類異常可以忽略他們,但一旦發生程序就會異常終止。這類異常對debug非常有幫助,當然,如果需要也可以catch

理論上講,應該捕捉一切可以預知的異常。當然,如果不是最終的使用者(客戶程序員),而是類庫提供者,可以throws,因為你可以確知這些異常會最終被處理;否則,一定要謹慎的使用throws,因為可能最終exception不會被正確處理。

的確是有這樣的特例的。比如,在jsp里,即使不處理異常也不拋出,因為jsp本身機制,也不會報編譯錯。這個時候,可能會使這個異常成為類似於RuntimeException的東西,讓最終用戶看到。這種做法是不負責任的。

RuntimeException只是一個概念,實際上,本來所有的Exception都一樣,本質上RuntimeException不會另行處理。所以,是不是throws,還是要根據你的總體設計中bean所處的地位來進行判斷。

 

一句話總結:

除非你想把異常處理的責任交給調用者,一般不用throws, 。

解釋:
比如你要讀入一些文件,如果你想通知調用者,讓調用者決定如何
處理這個異常,你就把這個異常throws給調用者;
如果你知道應該如何處理這個異常,或者你想把異常馬上解決,
你可以就地catch她。

這完全取決於你想把異常自己立即處理還是想把處理責任返回給調用者。
取決於你的程序的結構和要求。

我的經驗,大多是拋出后,被一級調用者處理,如果一級調用者再次拋出
此異常給二級調用者,很容易使問題復雜化;另外,還有一種情況就是
立即catch

 

高效處理Java異常的兩種方法

作者: BUILDER.COM


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM