1. Throwable的方法

          String getMessage()

          String getLocalizedMessage()
          String toString()
          void printStackTrace()
          每個方法都比前一個提供更多的信息

          2. 重新拋出異常

          catch (Exception e) {

          System.err.println(“An exception was thrown”);

          throw e;

          }

          重拋異常會把異常拋給上一級環境中的異常處理程序,同一個try快的后續catch字句將被忽略。

          由于只是把當前異常對象重新拋出,printStackTrace()方法顯示的將是原來的異常拋出點的調用棧信息,而非重新拋出點的信息。要想更新這個信息,把throw e;改成

          throw e.fillInStackTrace();

          3. 異常鏈

          有時候你需要處理一個異常并拋出另一個,但仍要保持原異常的信息,這被成為異常鏈。

          Throwable的三個基礎子類Error, Exception, RuntimeException都有一個接收cause參數的構造器。如果想建立這三個子類以外的異常鏈,就得使用initCause()方法。

          4. 標準Java異常

          Throwable有兩個直接子類:Error類代表了系統運行期錯誤,通常情況不用捕獲;Exception類則是Java類庫、用戶的方法。通常要處理的是Exception

          當然,異常類中最重要的還是類名。

          異常并非都在java.lang中,有些還在util, net, io等庫中。

          5. RuntimeException

          RuntimeException通常由Java自動拋出,如

          if (reference == null) throw new NullPointerException();

          是多余的。

          如果一個RuntimeException被拋出后一直到main方法也未被處理,printTraceStack()方法被自動調用。

          6. finally

          沒有垃圾收集器或析構函數自動調用的語言中,finally的重要性在于釋放內存。而Javafinally則多用在使對象恢復到原來的狀態,如打開的文件、網絡連接,在屏幕上的繪圖等。

          7. 異常丟失

          try {

          lm.f();

          } finally {

          lm.dispose();

          }

          如果lm.f()lm.dispose()都會拋出錯誤的話,f()中拋出的錯誤會被徹底丟失。C++中就不存在這個問題。

          所以對于會拋出錯誤的方法,最好將他們放入每一個try-catch塊中。


          posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2.23 Java notes - Error Handling with Exceptions

          Posted on 2007-04-22 20:25 ZelluX 閱讀(250) 評論(0)  編輯  收藏 所屬分類: OOP
          2007-02-23 19:38:46
          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 潮安县| 晋中市| 乌拉特后旗| 满洲里市| 遂川县| 临沂市| 朝阳区| 芦溪县| 杂多县| 蚌埠市| 观塘区| 西丰县| 云浮市| 兴宁市| 青浦区| 凤城市| 乐平市| 泰和县| 十堰市| 新余市| 双鸭山市| 合山市| 南岸区| 五华县| 五常市| 右玉县| 贵定县| 上饶市| 汪清县| 凤山县| 辽宁省| 宁强县| 电白县| 肇州县| 阿合奇县| 赣州市| 盖州市| 义马市| 电白县| 博乐市| 大同县|