亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

重新“擲”出違例

2019-11-18 13:19:40
字體:
來源:轉載
供稿:網友

  在某些情況下,我們想重新擲出剛才產生過的違例,非凡是在用Exception捕捉所有可能的違例時。由于我們已擁有當前違例的句柄,所以只需簡單地重新擲出那個句柄即可。下面是一個例子:
  catch(Exception e) {
  System.out.  throw e;
  }
  重新“擲”出一個違例導致違例進入更高一級環境的違例控制器中。用于同一個try塊的任何更進一步的catch從句仍然會被忽略。此外,與違例對象有關的所有東西都會得到保留,所以用于捕捉特定違例類型的更高一級的控制器可以從那個對象里提取出所有信息。
  若只是簡單地重新擲出當前違例,我們打印出來的、與printStackTrace()內的那個違例有關的信息會與違例的起源地對應,而不是與重新擲出它的地點對應。若想安裝新的堆棧跟蹤信息,可調用fillInStackTrace(),它會返回一個非凡的違例對象。這個違例的創建過程如下:將當前堆棧的信息填充到原來的違例對象里。下面列出它的形式:
  
  //: Rethrowing.
java
  // Demonstrating fillInStackTrace()
  
  public class Rethrowing {
   public static void f() throws Exception {
    System.out.println(
     "originating the exception in f()");
    throw new Exception("thrown from f()");
   }
   public static void g() throws Throwable {
    try {
     f();
    } catch(Exception e) {
     System.out.println(
      "Inside g(), e.printStackTrace()");
     e.printStackTrace();
     throw e; // 17
     // throw e.fillInStackTrace(); // 18
    }
   }
   public static void
   main(String[] args) throws Throwable {
    try {
     g();
    } catch(Exception e) {
     System.out.println(
      "Caught in main, e.printStackTrace()");
     e.printStackTrace();
    }
   }
  } ///:~
  
  其中最重要的行號在注釋內標記出來。注重第17行沒有設為注釋行。它的輸出結果如下:
  
  originating the exception in f()
  Inside g(), e.printStackTrace()
  java.lang.Exception: thrown from f()
      at Rethrowing.f(Rethrowing.java:8)
      at Rethrowing.g(Rethrowing.java:12)
      at Rethrowing.main(Rethrowing.java:24)
  Caught in main, e.printStackTrace()
  java.lang.Exception: thrown from f()
      at Rethrowing.f(Rethrowing.java:8)
      at Rethrowing.g(Rethrowing.java:12)
      at Rethrowing.main(Rethrowing.java:24)
  
  因此,違例堆棧路徑無論如何都會記住它的真正起點,無論自己被重復“擲”了好幾次。
  若將第17行標注(變成注釋行),而撤消對第18行的標注,就會換用fillInStackTrace(),結果如下:
  
  originating the exception in f()
  Inside g(), e.printStackTrace()
  java.lang.Exception: thrown from f()
      at Rethrowing.f(Rethrowing.java:8)
      at Rethrowing.g(Rethrowing.java:12)
      at Rethrowing.main(Rethrowing.java:24)
  Caught in main, e.printStackTrace()
  java.lang.Exception: thrown from f()
      at Rethrowing.g(Rethrowing.java:18)
      at Rethrowing.main(Rethrowing.java:24)
  
  由于使用的是fillInStackTrace(),第18行成為違例的新起點。
  針對g()和main(),Throwable類必須在違例規格中出現,因為fillInStackTrace()會生成一個Throwable對象的句柄。由于Throwable是Exception的一個基礎類,所以有可能獲得一個能夠“擲”出的對象(具有Throwable屬性),但卻并非一個Exception(違例)。因此,在main()中用于Exception的句柄可能丟失自己的目標。為保證所有東西均井然有序,編譯器強制Throwable使用一個違例規范。舉個例子來說,下述程序的違例便不會在main()中被捕捉到:
  
  //: ThrowOut.java
  public class ThrowOut {
   public static void
   main(String[] args) throws Throwable {
    try {
     throw new Throwable();
    } catch(Exception e) {
     System.out.println("Caught in main()");
    }
   }
  } ///:~
  
  也有可能從一個已經捕捉的違例重新“擲”出一個不同的違例。但假如這樣做,會得到與使用fillInStackTrace()類似的效果:與違例起源地有關的信息會全部丟失,我們留下的是與新的throw有關的信息。如下所示:
  
  //: RethrowNew.java
  // Rethrow a different object from the one that
  // was caught
  
  public class RethrowNew {
   public static void f() throws Exception {
    System.out.println(
     "originating the exception in f()");
    throw new Exception("thrown from f()");
   }
   public static void main(String[] args) {
    try {
     f();
    } catch(Exception e) {
     System.out.println(
      "Caught in main, e.printStackTrace()");
     e.printStackTrace();
     throw new NullPointerException("from main");
    }
   }
  } ///:~
  
  輸出如下:
  
  originating the exception in f()
  Caught in main, e.printStackTrace()
  java.lang.Exception: thrown from f()
      at RethrowNew.f(RethrowNew.java:8)
      at RethrowNew.main(RethrowNew.java:13)
  java.lang.NullPointerException: from main
      at RethrowNew.main(RethrowNew.java:18)
  
  最后一個違例只知道自己來自main(),而非來自f()。注重Throwable在任何違例規范中都不是必需的。
  永遠不必關心如何清除前一個違例,或者與之有關的其他任何違例。它們都屬于用new創建的、以內存堆為基礎的對象,所以垃圾收集器會自動將其清除。

上一篇:違例控制器

下一篇:捕獲所有違例

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av网站在线| 午夜精品视频网站| 精品中文字幕在线观看| 国产精品久久不能| 色妞一区二区三区| 久久综合国产精品台湾中文娱乐网| 神马国产精品影院av| 精品国产一区二区三区久久久狼| 久久久久成人精品| 欧美精品免费播放| 欧美性猛交xxx| 亚洲japanese制服美女| 欧美成人免费大片| 久久久成人精品| 午夜精品久久久久久久99热| 国产精品免费在线免费| 91极品女神在线| 岛国视频午夜一区免费在线观看| 日韩精品黄色网| 久久精品国产2020观看福利| 国产精品v片在线观看不卡| 一区二区三区日韩在线| 日韩有码片在线观看| 成人av电影天堂| 日本精品一区二区三区在线播放视频| 欧美成人午夜剧场免费观看| 久久久久久噜噜噜久久久精品| 亚洲国产精品电影在线观看| 一区二区三区高清国产| 久久国产一区二区三区| 国产精品视频久久久久| 久久精品人人爽| 亚洲r级在线观看| 日韩在线观看免费全集电视剧网站| 欧美一区在线直播| 亚洲人免费视频| 欧美黑人巨大精品一区二区| 国产日产亚洲精品| 精品国产户外野外| 91久久久久久久久久久久久| 久久精品国产精品| 成人激情在线播放| 久久天天躁狠狠躁夜夜躁| 亚洲人成人99网站| 91久久精品国产91性色| 97香蕉超级碰碰久久免费的优势| 国产精品精品国产| 欧美亚洲另类制服自拍| 2019最新中文字幕| 亚洲天堂av综合网| 一本一本久久a久久精品牛牛影视| 成人深夜直播免费观看| 久久视频这里只有精品| 欧美中文字幕在线| 国产成人精品网站| 久久久久国产一区二区三区| 欧美寡妇偷汉性猛交| 在线播放日韩av| 亚洲黄在线观看| 久久久午夜视频| 日本不卡高字幕在线2019| 成人福利网站在线观看| 精品国产欧美成人夜夜嗨| 成人黄色在线播放| 91色视频在线导航| 欧美精品性视频| 亚洲大胆人体在线| 日产日韩在线亚洲欧美| 欧美日韩成人网| 日韩在线视频线视频免费网站| 国产精品一区二区av影院萌芽| 91欧美激情另类亚洲| 亚洲综合中文字幕68页| 亚洲视频视频在线| 久久久久久九九九| 久久久精品国产| 欧美午夜激情在线| 欧美日本亚洲视频| 久久免费视频在线| 最近中文字幕mv在线一区二区三区四区| 精品免费在线观看| 亚洲在线观看视频网站| 成人亲热视频网站| 一本一本久久a久久精品牛牛影视| 97视频在线观看免费高清完整版在线观看| 国产999在线观看| 亚洲成av人片在线观看香蕉| 97av在线视频| 97在线看免费观看视频在线观看| 一本色道久久综合狠狠躁篇怎么玩| 日韩一区二区久久久| 最近2019年好看中文字幕视频| 国产精品久久久久久久久久尿| 九九热99久久久国产盗摄| 日韩在线视频导航| 日本免费在线精品| 91av免费观看91av精品在线| 欧美精品在线免费播放| 亚洲高清在线观看| 久久精品99久久久久久久久| 欧美精品激情blacked18| 久国内精品在线| 欧美高清激情视频| 久久国产精品久久久久久久久久| 韩曰欧美视频免费观看| 日韩精品久久久久| 91av成人在线| 在线播放日韩欧美| 日韩在线视频观看| 91精品久久久久久久久久久久久久| 久久人人爽人人爽人人片亚洲| 国产精品jizz在线观看麻豆| 97超碰蝌蚪网人人做人人爽| 久久久久久久久久av| 成人在线视频福利| 国产精品高潮呻吟久久av无限| 日本精品视频在线播放| 日韩av成人在线| 国产精品大陆在线观看| 日本国产精品视频| 538国产精品一区二区免费视频| 日韩av不卡电影| 欧美日韩国产一区在线| 亚洲在线免费视频| 国产精品成人aaaaa网站| 最近2019免费中文字幕视频三| 亚洲人成伊人成综合网久久久| 亚洲最大福利视频网站| 国产欧美最新羞羞视频在线观看| 欧美日韩激情视频8区| 66m—66摸成人免费视频| 久久99亚洲精品| 亚洲精选中文字幕| 综合欧美国产视频二区| 久久国产精品久久国产精品| 国产精品1区2区在线观看| 国产经典一区二区| 日韩精品在线免费观看| 色播久久人人爽人人爽人人片视av| 国产色婷婷国产综合在线理论片a| 91亚洲精华国产精华| 日韩在线播放av| 日韩中文有码在线视频| 中文字幕少妇一区二区三区| 国产精品日日摸夜夜添夜夜av| 欧美激情综合色综合啪啪五月| 91九色在线视频| 久久青草精品视频免费观看| 精品在线观看国产| 久久99精品久久久久久青青91| 亚洲的天堂在线中文字幕| 国产精品av网站| 亚洲无av在线中文字幕| 亚洲第一综合天堂另类专| 一区二区三区四区在线观看视频| 中文国产亚洲喷潮| 精品性高朝久久久久久久| 清纯唯美亚洲激情| 91高清免费在线观看| 欧美一区二区大胆人体摄影专业网站| 国产精品久久久久久久天堂| 亚洲free性xxxx护士白浆| 亚洲福利视频网| 亚洲日韩中文字幕在线播放|