隨筆-71  評論-4  文章-0  trackbacks-0
          1. 異常/錯(cuò)誤
          1.1 異常處理的基本結(jié)構(gòu)
          異常處理的基本結(jié)構(gòu)如下:

          try {

          someReallyExceptionalMethod();

          } catch (NullPointerException n) { // a subclass of RuntimeException

          . . .

          } catch (RuntimeException r) { // a subclass of Exception

          . . .

          } catch (IOException i) { // a subclass of Exception

          . . .

          } catch (MyFirstException m) { // our subclass of Exception

          . . .

          } catch (Exception e) { // a subclass of Throwable

          . . .

          } catch (Throwable t) {

          . . . // Errors, plus anything not caught above are caught here

          } finally {…}

          Java中異常和錯(cuò)誤類都是從Throwable類中繼承下來的,即Throwable類有兩個(gè)子類:Error類及Exception類,Error類的實(shí)例是Java運(yùn)行環(huán)境的內(nèi)部錯(cuò)誤,這些錯(cuò)誤都是非常少及非常致命的,我們不能或者很少能對這些錯(cuò)誤作出處理,或者捕獲這些錯(cuò)誤。

          而Exception類可以分為二類,一種是運(yùn)行時(shí)exceptions(Runtime exceptions)如SecurityException,ArrayIndexOutofBounds,NullPointerException等;另一種是除此之外的,如EOFException等。在Exception類層次結(jié)構(gòu)上,越是上層的Exception類,就越具有一般性,而越下面的Exception就越具有針對性。在多數(shù)Exception類是java.lang包中的一部分,其它一些存在于其它的包中。

          一般來說在將可能出錯(cuò)的代碼放入try塊中,而在catch中捕獲可能的錯(cuò)誤,一般從具體的錯(cuò)誤開始,一直Throwable,而在finally中入些錯(cuò)誤是否發(fā)生都需處理的代碼,如退出循環(huán),釋放資源等。

          1.2 聲明可能產(chǎn)生異常的方法
          在聲明方法時(shí)可以加上關(guān)鍵字throws,用以說明該方法可能產(chǎn)生某個(gè)或者某些異常,如:

          public boolean myOtherMethod (int x, int y)

          throws AnException, AnotherExeption, AThirdException {

          ...}

          有了這樣的聲明后,其它使用該方法的地方最好使用try…catch來處理該方法指定的異常。

          1.3 創(chuàng)建自己的異常類
          自己定義的異常類應(yīng)從其它的異常類中繼承下來,最好找一個(gè)接近的異常類來繼承,如定義文件格式錯(cuò)誤的異常類,最好從IOException繼承。如果找不到接近的異常類繼承,那么就直接從Exception類繼承,因?yàn)樗撬挟惓n惖谋亲妫韵率且粋€(gè)簡單的自定義異常類:

          class MyException extends Exception {

          public MyException() {}

          public MyException(String msg) {

          super(msg);

          }

          }

          說明:

          (1) 異常類一般會(huì)有二個(gè)構(gòu)造函數(shù),一個(gè)帶參數(shù),一個(gè)帶String類型的參數(shù);

          (2) 當(dāng)然可以再定義其它的構(gòu)造函數(shù)及自己的變量及方法成員,如可以在類中定義方法用于記錄log;

          以下是對該異常類的引用:

          public static void g() throws MyException {

          System.out.println("Throwing MyException from g()");

          throw new MyException("Originated in g()");

          }

          說明:

          (3) 在方法定義后引用異常類,可以直接將該類名放在throws后;

          (4) 可以使用throw new MyException來拋出自定義異常的實(shí)例;

          1.4 其它
          (1) 如果使用帶有throw定義的方法,應(yīng)將它放入try…catch中,處理指定異常后,重新將該異常拋出,即向上傳遞;

          (2) 對于一些可預(yù)測的可解決的異常最好直接在程序中處理掉,而不要拋出異常;

          使用異常會(huì)占用大量的運(yùn)行時(shí)間,所以盡量少用;
          posted on 2006-03-20 12:17 zjw_albert 閱讀(114) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 济阳县| 阳高县| 当雄县| 龙南县| 斗六市| 揭西县| 响水县| 稷山县| 开封市| 福海县| 临汾市| 泰宁县| 扬中市| 漳平市| 安义县| 依兰县| 巴林右旗| 芦溪县| 金乡县| 仁怀市| 嘉峪关市| 读书| 永寿县| 宾阳县| 获嘉县| 海丰县| 东阳市| 湄潭县| 五莲县| 永宁县| 濮阳县| 措勤县| 平阳县| 永仁县| 芷江| 基隆市| 合肥市| 灌云县| 方城县| 青岛市| 茌平县|