<strike id="ddzbl"><span id="ddzbl"><em id="ddzbl"></em></span></strike>
    <font id="ddzbl"><sub id="ddzbl"><mark id="ddzbl"></mark></sub></font>

      <address id="ddzbl"></address>
      <listing id="ddzbl"></listing>

        <track id="ddzbl"><span id="ddzbl"><progress id="ddzbl"></progress></span></track>

        首頁技術文章正文

        運行時異常和編譯時異常的處理機制是什么?

        更新時間:2022-09-16 來源:黑馬程序員 瀏覽量:

        編譯時異常,是在編譯成class文件時必須要處理的異常,也稱之為受檢異常,運行時異常,在編譯成class文件不需要處理,在運行字節碼文件時可能出現的異常。簡單來說:編譯時異常就是在編譯的時候出現的異常,運行時異常就是在運行時出現的異常。

        異常體系

        學習異常的目的就是避免異常的出現,同時處理可能出現的異常,讓代碼更穩健。

        運行時異常示例

        數組索引越界異常: ArrayIndexOutOfBoundsException

        空指針異常 : NullPointerException,直接輸出沒有問題,但是調用空指針的變量的功能就會報錯。

        數學操作異常:ArithmeticException

        類型轉換異常:ClassCastException

        數字轉換異常: NumberFormatException

        運行時異常:一般是程序員業務沒有考慮好或者是編程邏輯不嚴謹引起的程序錯誤,自己的水平有問題!

        繼承自RuntimeException的異?;蛘咂渥宇?,編譯階段不報錯,運行可能報錯。

        編譯時異常

        編譯時異常不是RuntimeException或者其子類的異常,編譯階就報錯,必須處理,否則代碼不通過。

        編譯時異常示例

        String date = "2015-01-12 10:23:21";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy=MM=dd HH:mm:ss");
        Date d = sdf parce(date);
        System. out. println (d);

        編譯時異常的目的是提醒程序員的不要出錯,在編譯階段發出的預警,編譯時異常繼承自Exception的異?;蛘咂渥宇?。出現編譯報錯,必須處理,否則代碼不通過。但編譯時異常通常很少,可遇不可求。

        編譯時異常

        異常的默認處理流程:

        ①默認會在出現異常的代碼那里自動的創建一個異常對象:ArithmeticException。

        ②異常會從方法中出現的點這里拋出給調用者,調用者最終拋出給JVM虛擬機。

        ③虛擬機接收到異常對象后,先在控制臺直接輸出異常棧信息數據。

        ④直接從當前執行的異常點干掉當前程序。

        ⑤后續代碼沒有機會執行了,因為程序已經死亡。

        (public class ExceptionDemo {
             public static void main(String[] args) {
                 System.out.printLn("程序開始。。。。。。。。。。");
                 chu( a: 10, b: 0);
                 System.out.println("程序結求。。。。。。。。。。");
             }
        
             public static void chu(int a , int b){
                  System.out.println(a);
                  System.out.println(b);
                  int c = a / b;//出現了運行異常,自動創建異常對象:ArithmeticException
                  System.out.println("結果是:"+c);
             }
        }

        編譯時異常是編譯階段就出錯的,所以必須處理,否則代碼根本無法通過.

        編譯時異常的處理形式有三種:出現異常直接拋出去給調用者,調用者也繼續拋出去。 出現異常自己捕獲處理,不麻煩別人。前兩者結合,出現異常直接拋出去給調用者,調用者捕獲處理。

        異常處理方式1 —— throws

        throws:用在方法上,可以將方法內部出現的異常拋出去給本方法的調用者處理。

        這種方式并不好,發生異常的方法自己不處理異常,如果異常最終拋出去給虛擬機將引起程序死亡。

        拋出異常格式:

        方法 throws 異常1 ,異常2 ,異常3 ..{
        }

        規范做法:

        方法 throws Exception{
        }

        異常處理方式2 —— try…catch…

        監視捕獲異常,用在方法內部,可以將方法內部出現的異常直接捕獲處理。這種方式還可以,發生異常的方法自己獨立完成異常的處理,程序可以繼續往下執行。

        try{
            // 可能出現異常的代碼!
        }catch (Exception e){
            e.printStackTrace(); // 直接打印異常棧信息
        }
        
        Exception可以捕獲處理一切異常類型!

        異常處理方式3 —— 前兩者結合

        方法直接將異通過throws拋出去給調用者,調用者收到異常后直接捕獲處理。

        異常處理的總結

        在開發中按照規范來說第三種方式是最好的:底層的異常拋出去給最外層,最外層集中捕獲處理。實際應用中,只要代碼能夠編譯通過,并且功能能完成,那么每一種異常處理方式似乎也都是可以的。

        運行時異常的處理形式

        運行時異常編譯階段不會出錯,是運行時才可能出錯的,所以編譯階段不處理也可以。

        按照規范建議還是處理:建議在最外層調用處集中捕獲處理即可。

        分享到:
        在線咨詢 我要報名

        CHINESE熟女老女人HD

          <strike id="ddzbl"><span id="ddzbl"><em id="ddzbl"></em></span></strike>
          <font id="ddzbl"><sub id="ddzbl"><mark id="ddzbl"></mark></sub></font>

            <address id="ddzbl"></address>
            <listing id="ddzbl"></listing>

              <track id="ddzbl"><span id="ddzbl"><progress id="ddzbl"></progress></span></track>