<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 概述 是java代碼編譯或者運行過程中出現的問題. ## 異常的繼承體系 1. Exception(普通問題):平時指的異常是這個.平時開發只研究異常,不研究錯誤. 2. Error(嚴重的問題):比如語法錯誤,如果程序出現了錯誤,只能改代碼. 3. 共同的父類Throwable ## 異常分類 1. 編譯時異常:指的是Exception以及Exception子類(RuntimeException除外). 2. 運行時異常:指的是RuntimeException以及RuntimeException的子類. ## 異常基本操作 1. 創建異常對象(JDK已自定義異常會自動創建對象,自定義異常需要手動創建) 2. 拋出異常(不處理異常,不處理也是一種處理),JVM報錯. 3. 捕獲異常(處理異常). ## 注意 異常處理,指處理的一種可能性,即有了異常處理的代碼,不一定會產生異常.如果沒有產生異常,則代碼正常執行,如果產生了異常,則終端當前執行代碼,執行異常處理代碼. 1.運行時異常被拋出可以不處理,即不捕獲也不聲明拋出. 如果父類方法拋出了多個異常,子類重寫父類方法時,只能拋出相同的異常或者該異常的子類異常. 2. 父類方法沒有拋出異常,子類異常重寫父類方法時也不可拋出異常.此時子類產生該異常,只能捕獲處理,不能聲明拋出(多線程會用到這個) 3. 當多異常處理時,捕獲處理,前邊的類不能是后面類的父類. 4. 在try/catch之后可以追加finally代碼塊,其中的代碼一定會被執行,通常用于資源回收. ## 異常產生的過程 默認的方式叫中斷處理方式. throw new 是虛擬機自動new的對象,它會根據異常的類型來new對象,thorw的目的是看看有沒有程序來處理異常,如果沒有程序處理異常,那么程序會中斷執行. ![](https://box.kancloud.cn/1a1c2c77f000c8991aa36a04756042f8_1201x431.png) ## 模擬虛擬機產生異常 ~~~ public class ExceptionDome { public static void main(String[] args) { int[] nums = {1, 2}; System.out.println(getNum(nums)); System.out.println("hello"); //這里執行不了 } public static int getNum(int[] nums) { if (nums.length <= 2) throw new ArrayIndexOutOfBoundsException("索引越界"); //只要執行到了throw異常肯定拋出了 return nums[2]; } } ~~~ ![](https://box.kancloud.cn/a1cc3239f34e2537560ccb556fcbf9e5_1448x254.png) ## 異常處理的第一種方式(不處理,或者叫再次申明操作) 使用throws(形容詞),形容可能拋出的異常名稱.處理異常是處理的一種可能性. throws表示某一個方法可能拋出XX異常,要求調用者去處理它. 也可以叫做 ### 格式 ~~~ public static int getNum(int[] nums) throws ArrayIndexOutOfBoundsException , XXException { } ~~~ ## 異常處理的第二種方式(捕獲處理) ### 格式 ~~~ try{ //可能出現異常的代碼 }catch (Exception e){ //處理異常 }finally{ //必須要執行代碼,比如釋放資源的代碼 } ~~~ ## 其他的處理方式一 (多個異常分別處理) 看起來很清晰,但是很少用,增加了代碼量. ~~~ FileReader fr = null; try { fr = new FileReader("1.xxx"); } catch (IOException e) { System.out.println("打開文件失敗"); } try { int ch = fr.read(); } catch (IOException e) { System.out.println("讀取文件失敗"); } try { fr.close(); } catch (IOException e) { System.out.println("關閉文件失敗"); } ~~~ ## 其他的處理方式二 (多個異常一次捕獲,多次處理) 這種方式也不常用. 要注意catch異常類型的順序.下面兩個異常類型就不能顛倒順序,否則報錯,多個異常如果有子父類關系,必須把子類異常寫在前面. ~~~ FileReader fr = null; try { fr = new FileReader("1.xxx"); int ch = fr.read(); fr.close(); } catch (FileNotFoundException file) { System.out.println("關閉文件失敗"); } catch (IOException io) { System.out.println("文件讀取或者關閉失敗"); } ~~~ ## 其他的處理方式三 (多個異常一次捕獲,一次處理) 最常用,一個try,一個catch. ~~~ FileReader fr = null; try { fr = new FileReader("1.xxx"); int ch = fr.read(); } catch (IOException io) { System.out.println("文件讀取或者關閉失敗"); } finally { try { fr.close(); } catch (IOException e) { System.out.println("文件關閉失敗"); } } ~~~ ## 運行時異常 如何區分一個異常到底是編譯時一場還是運行時異常. 1. 編譯時異常:在編譯的時候會報錯的(需要我們去處理) 2. 運行時異常:在編譯的時候不會報錯.只要定義一個方法,在方法中拋出一個異常對象,如果編譯報錯那么就是編譯時異常,如果編譯成功,那么就是運行時異常. ## 自定義異常 1. 類名必須要以Exception結尾. 2. 必須繼承Exception或RuntimeException. 3. 至少有兩個構造,一個是空參的,一個是客接收String類型的. ~~~ public class PersonException extends Exception { public PersonException() { super(); } public PersonException(String s) { super(s); } } ~~~ ## 實例 ~~~ public class NoSuchAgeException extends Exception { public NoSuchAgeException() { super(); } public NoSuchAgeException(String s) { super(s); } } ~~~ ~~~ public class Person { private String name; private int age; public Person(int age) throws NoSuchAgeException { if (age < 0 || age > 150) throw new NoSuchAgeException("年齡非法"); this.age = age; } } ~~~ ~~~ public class main { public static void main(String[] args) { try { Person p = new Person(200); } catch (NoSuchAgeException e) { e.printStackTrace(); } System.out.println("hello"); //自定義的異常程序會繼續執行 } } ~~~
                  <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>

                              哎呀哎呀视频在线观看