工作小驛

          Ninja!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks

               異常處理是個很重要的概念,很多語言中都對異常處理下了很大的功夫。如果你的語法沒有寫錯,編譯器是不會報錯,而且編譯成功。如果編譯成功后,運行時發生了錯誤該怎么處理呢?例如我要加載一個類,而這個類被刪了。這種情況就是異常。我們采用try..catch..finally語句作為處理方式。舉個異常處理的例子吧。實踐:

          public class TestExceptions {

            public static void main(String[] args) {

              for ( int i = 0; true; i++ ) {

                System.out.println("args[" + i + "] is '" + args[i] + "'");

              } }}

          在這里面main方法的參數args是個字符串型的數組,在執行的時候要輸入

          java TestExceptions 100jq 后面的就是參數args[0]就是第一個參數。我們輸入java TestException是出現了錯誤。如圖20-1所示,

           

          這上說的是數組邊界溢出異常,第0個產生錯誤,因為根本就沒有args[0],這個元素。

          我們再敲一下java TestExceptions 100jq 如圖201所示,

           

          輸出了args[0]沒有異常了,并且輸出了。而循環到i1時,又發生異常。我們再輸入兩個參數java TestExceptions 100jq www.100jq.com 這回兩個參數了。同樣的道理,args[2]發生異常。

          那么我們如何來捕捉這個異常呢,我們對上述代碼做一下簡單的修改。實踐:

          public class TestExceptions1 {

            public static void main(String[] args) {

              try {

                for ( int i = 0; true; i++ ) {

                 System.out.println("args[" + i + "] is '" + args[i] + "'");

                }

              } catch (ArrayIndexOutOfBoundsException e) {

                System.out.println("異常捕捉: " + e);

                System.out.println("退出...");

              } }} 這回輸入剛才那兩個參數的話,就不會出現那一堆難懂的英文了。異常已經在我們的掌控之中。否則,有很多異常是足夠使內存導毀的。

          這里面我們只使用了try…catch 哪個地方你覺得它有毛病,你就try哪。但是try然后,要catch(捕捉)的。如果事先你想不出它會發生什么異常的話,就用finally。實踐:

          class FinallyDemo {

          static void procA() {

          try {

          System.out.println("inside procA");

          throw new RuntimeException("demo");

          } finally {

          System.out.println("procA's finally");

          }

          }

          // try程序塊內返回

          static void procB() {

          try {

          System.out.println("inside procB");

          return;

          } finally { //結束

          System.out.println("procB's finally");

          }

          }

          // 執行一個try程序塊

          static void procC() {

          try {

          System.out.println("inside procC");

          } finally {

          System.out.println("procC's finally");

          }

          }

          public static void main(String args[]) {

          try {

          procA();

          } catch (Exception e) {

          System.out.println("異常捕捉");

          }

          procB();

          procC();

          }

          } 上述源碼打包下載

          如果將方法里拋出異常拋出,使用throws關鍵字 public void abc() throws exception 也是要用catch來捕捉的。實踐:

          class ThrowDemo {

          static void demoproc() {

          try {

          throw new NullPointerException("demo");

          } catch(NullPointerException e) {

          System.out.println("Caught inside demoproc.");

          throw e; //重新拋出異常 }}

          public static void main(String args[]) {

          try {

          demoproc();

          } catch(NullPointerException e) {

          System.out.println("Recaught: " + e);

          }}} 19個源碼打包下載

          異常類除了jdk提供我們的那些之外,我們自己還可以自定義的。Jdk提供的剛才我們已經見過幾個了 ArrayIndexOutOfBoundsException(數組邊界溢出),NullPointerException(空指針異常)。要是jdk沒有的,我們只有自己定義了。比如說我們現在要用XML開發,那么jdk沒有寫這方面的異常類,我們就得自己寫一個關于XML的異常了。我們下節課講自定義異常類。

          posted on 2007-08-07 15:30 王君 閱讀(172) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 祥云县| 大宁县| 中山市| 潢川县| 宜章县| 玉树县| 通州区| 本溪市| 珲春市| 建阳市| 会昌县| 肇州县| 克什克腾旗| 依兰县| 佛坪县| 柘城县| 张家川| 天长市| 鄂托克旗| 合阳县| 日照市| 建阳市| 普兰县| 张北县| 安义县| 宜川县| 孟连| 滦平县| 怀远县| 东平县| 会同县| 岳阳县| 江永县| 象山县| 庆元县| 桐城市| 嘉峪关市| 遂溪县| 昌乐县| 乌拉特后旗| 察哈|