<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## [自定義異常](https://lingcoder.gitee.io/onjava8/#/book/15-Exceptions?id=%e8%87%aa%e5%ae%9a%e4%b9%89%e5%bc%82%e5%b8%b8) 不必拘泥于 Java 已有的異常類型。Java異常體系不可能預見你將報告的所有錯誤,所以你可以創建自己的異常類,來表示你的程序中可能遇到的問題。 要自己定義異常類,必須從已有的異常類繼承,最好是選擇意思相近的異常類繼承(不過這樣的異常并不容易找)。建立新的異常類型最簡單的方法就是讓編譯器為你產生無參構造器,所以這幾乎不用寫多少代碼: ~~~ // exceptions/InheritingExceptions.java // Creating your own exceptions class SimpleException extends Exception {} public class InheritingExceptions { public void f() throws SimpleException { System.out.println( "Throw SimpleException from f()"); throw new SimpleException(); } public static void main(String[] args) { InheritingExceptions sed = new InheritingExceptions(); try { sed.f(); } catch(SimpleException e) { System.out.println("Caught it!"); } } } ~~~ 輸出為: ~~~ Throw SimpleException from f() Caught it! ~~~ 編譯器創建了無參構造器,它將自動調用基類的無參構造器。本例中不會得到像 SimpleException(String) 這樣的構造器,這種構造器也不實用。你將看到,對異常來說,最重要的部分就是類名,所以本例中建立的異常類在大多數情況下已經夠用了。 本例的結果被顯示在控制臺。你也可以通過寫入 System.err 而將錯誤發送給標準錯誤流。通常這比把錯誤信息輸出到 System.out 要好,因為 System.out 也許會被重定向。如果把結果送到 System.err,它就不會隨 System.out 一起被重定向,所以用戶就更容易注意到它。 你也可以為異常類創建一個接受字符串參數的構造器: ~~~ // exceptions/FullConstructors.java class MyException extends Exception { MyException() {} MyException(String msg) { super(msg); } } public class FullConstructors { public static void f() throws MyException { System.out.println("Throwing MyException from f()"); throw new MyException(); } public static void g() throws MyException { System.out.println("Throwing MyException from g()"); throw new MyException("Originated in g()"); } public static void main(String[] args) { try { f(); } catch(MyException e) { e.printStackTrace(System.out); } try { g(); } catch(MyException e) { e.printStackTrace(System.out); } } } ~~~ 輸出為: ~~~ Throwing MyException from f() MyException at FullConstructors.f(FullConstructors.java:11) at FullConstructors.main(FullConstructors.java:19) Throwing MyException from g() MyException: Originated in g() at FullConstructors.g(FullConstructors.java:15) at FullConstructors.main(FullConstructors.java:24) ~~~ 新增的代碼非常簡短:兩個構造器定義了 MyException 類型對象的創建方式。對于第二個構造器,使用 super 關鍵字明確調用了其基類構造器,它接受一個字符串作為參數。 在異常處理程序中,調用了在 Throwable 類聲明(Exception 即從此類繼承)的 printStackTrace() 方法。就像從輸出中看到的,它將打印“從方法調用處直到異常拋出處”的方法調用序列。這里,信息被發送到了 System.out,并自動地被捕獲和顯示在輸出中。但是,如果調用默認版本: ~~~ e.printStackTrace(); ~~~ 信息就會被輸出到標準錯誤流。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看