程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中的異常

Java中的異常

編輯:關於JAVA

Java異常是我們編程中時時刻刻都要使用的特性,但是我們卻很少去關注它細節的一些信 息。

Exception架構

所有的異常都是派生至Throwable,最主要的2個繼承類是Exception和Error。

我們常說的異常都是指Exception,Exception分為Check Exception和Unchecked Exception。

JDK文檔中對Error中解釋是:用於指示合理的應用程序不應該試圖捕獲的嚴重問題,大多 數這樣的錯誤都是異常條件。其中一個比較特殊的就是ThreadDeath,我們不應該去捕獲這個 異常,熟悉多線程編程的朋友一定會清楚其中的原因。

Check Exception和Unchecked Exception

之前在學習C++和C#的時候,所有的異常處理都屬於Unchecked Exception,後來學習Java 發現,Java語言對於某些異常強制要求聲明methods會拋出什麼異常,並且在需要強制捕獲某 些異常,這種異常就屬於Check Exception。

關於什麼時候應該使用Check Exception,什麼時候應該使用Unchecked Exception很多人 都有討論,並沒有一個統一的結論。不過絕大多數的觀點是:混合使用。

使用Exception的常見錯誤

我們看看下面這段代碼:

1:
2: // from http://gpcuster.cnblogs.com
3: InputStream input = null;
4:
5: try{
6:
7:  input = new FileInputStream("myFile.txt");
8:
9:  //do something with the stream
10:
11: } catch(IOException e){
12:  throw new WrapperException(e);
13: } finally {
14:  try{
15:  input.close();
16:  } catch(IOException e){
17:   throw new WrapperException(e);
18:  }
19: }

如果不存在myFile.txt文件的話,這段代碼最終將會如果執行?

如果仔細考慮這個問題會非常有意思:

首先,在執行input = new FileInputStream(“myFile.txt”)的時候,拋出 FileNotFindException。

然後,進入到catch段,將來拋出WrapperException,但還沒有拋出這個異常。

最後,進入final段,這個時候,input是null的,所以將會拋出NullPointException。

通過這個剪短的分析,我們可以看出,最終的執行結果是拋出NullPointException。

更好地使用異常

如何更加高效地使用異常是一個大家關注的問題,這裡主要有4點建議提供大家參考:

1 對catch住的異常進行包裝和擴展。

2 使用自定義的異常處理接口。

3 在catch異常的最上層記錄異常日志。

4 使用異常處理模板。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved