posts - 241,  comments - 116,  trackbacks - 0
          定義三個(gè)異常類:ExceptionA,ExceptionB,ExceptionC

           
          ?
          public class ExceptionA extends Exception {
              public ExceptionA(String str) {
                  super();
              }
          }
           
          public class ExceptionB extends ExceptionA {
           
              public ExceptionB(String str) {
                  super(str);
              }
          }
           
          public class ExceptionC extends ExceptionA {
              public ExceptionC(String str) {
                  super(str);
              }
          }

          異常丟失的情況:

           
          ?
          public class NeverCaught {
              static void f() throws ExceptionB{
                  throw new ExceptionB("exception b");
              }
           
              static void g() throws ExceptionC {
                  try {
                      f();
                  } catch (ExceptionB e) {
                      ExceptionC c = new ExceptionC("exception a");
                      throw c;
                  }
              }
           
              public static void main(String[] args) {
                      try {
                          g();
                      } catch (ExceptionC e) {
                          e.printStackTrace();
                      }
              }
           
          }
          /*
          exception.ExceptionC
          at exception.NeverCaught.g(NeverCaught.java:12)
          at exception.NeverCaught.main(NeverCaught.java:19)
          */

          為什么只是打印出來了ExceptionC而沒有打印出ExceptionB呢?這個(gè)還是自己分析一下吧!

          上面的情況相當(dāng)于少了一種異常,這在我們排錯(cuò)的過程中非常的不利。那我們遇到上面的情況應(yīng)該怎么辦呢?這就是異常鏈的用武之地:保存異常信息,在拋出另外一個(gè)異常的同時(shí)不丟失原來的異常。

           
          ?
          public class NeverCaught {
              static void f() throws ExceptionB{
                  throw new ExceptionB("exception b");
              }
           
              static void g() throws ExceptionC {
                  try {
                      f();
                  } catch (ExceptionB e) {
                      ExceptionC c = new ExceptionC("exception a");
                      //異常連
                      c.initCause(e);
                      throw c;
                  }
              }
           
              public static void main(String[] args) {
                      try {
                          g();
                      } catch (ExceptionC e) {
                          e.printStackTrace();
                      }
              }
           
          }
          /*
          exception.ExceptionC
          at exception.NeverCaught.g(NeverCaught.java:12)
          at exception.NeverCaught.main(NeverCaught.java:21)
          Caused by: exception.ExceptionB
          at exception.NeverCaught.f(NeverCaught.java:5)
          at exception.NeverCaught.g(NeverCaught.java:10)
          ... 1 more
          */

          這個(gè)異常鏈的特性是所有異常均具備的,因?yàn)檫@個(gè)initCause()方法是從Throwable繼承的。
          posted on 2011-12-26 10:25 墻頭草 閱讀(1556) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
          主站蜘蛛池模板: 东安县| 方城县| 辽阳市| 阜新| 仁化县| 海宁市| 贡嘎县| 久治县| 洞头县| 龙里县| 杭锦后旗| 都昌县| 弥渡县| 民乐县| 开封市| 林芝县| 禄劝| 山西省| 安远县| 木兰县| 新泰市| 淮北市| 浑源县| 卓尼县| 韩城市| 辰溪县| 霍邱县| 丁青县| 永福县| 辽源市| 精河县| 成武县| 固原市| 浦城县| 武威市| 屯门区| 莒南县| 汕头市| 梁河县| 高雄县| 沈阳市|