• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • java基礎之異常

    一 異常概念:指的是程序在執行過程中,出現的非正常的情況,最終會導致JVM的非正常停止。


    二異常體系:

       2.1Throwable體系:
           Error:嚴重錯誤Error,無法通過處理的錯誤,只能事先避免,好比絕癥。
           Exception:表示異常,異常產生后程序員可以通過代碼的方式糾正,使程序繼續運行,是必須要處理的。好
           比感冒、闌尾炎

     2.2 異常分類

    •   編譯時期異常:checked異常。在編譯時期,就會檢查,如果沒有處理異常,則編譯失敗。(如日期格式化異常)
    • 運行時期異常:runtime異常。在運行時期,檢查異常.在編譯時期,運行異常不會編譯器檢測(不報錯)。(如數學異常)

    三 異常處理

        3.1  拋出異常throw

    public class Demo03 {
        public static void main(String[] args) {
    //        int[] arr = {11, 22, 333};
            int[] arr = {};
            int number = getNumber(arr);
            System.out.println("number = " + number);
        }
    
        public static int getNumber(int[] arr) {
            if (arr.length == 0) {
                // 我們自己來產生一個異常
                throw new Exception("大哥,數組長度為0啦");
            }
    
            int i = arr[arr.length - 1]; // 拿到數組最后一個
            return i;
        }
    }
    //注意 如果產生了問題,我們就會throw將問題描述類即異常進行拋出,也就是將問題返回給該方法的調用者。

     3.2  聲明異常throws

    聲明異常:將問題標識出來,報告給調用者。如果方法內通過throw拋出了編譯時異常,而沒有捕獲處理(稍后講
    解該方式),那么必須通過throws進行聲明,讓調用者去處理。
    聲明異常格式:修飾符 返回值類型 方法名(參數) throws 異常類名1,異常類名2…{ }

    public static void main(String[] args) throws Exception {
    //        int[] arr = {11, 22, 333};
            int[] arr = {};
            int number = getNumber(arr);
            System.out.println("number = " + number);
        }
    
        // 班長將肚子痛的問題告訴別人,讓別人來處理
        public static int getNumber(int[] arr) throws Exception {
            if (arr.length == 0) {
                // 我們自己來產生一個異常
                throw new Exception("班長肚子痛");
            }
    
            int i = arr[arr.length - 1]; // 拿到數組最后一個
            return i;
        }

     3.3 捕獲異常try...catch

        捕獲異常:Java中對異常有針對性的語句進行捕獲,可以對出現的異常進行指定方式的處理。

       語法如下:

           

            try{
                編寫可能會出現異常的代碼
        }catch(異常類型 e){
            處理異常的代碼
            //記錄日志/打印異常信息/繼續拋出異常
            }

        try:該代碼塊中編寫可能產生異常的代碼。
        catch:用來進行某種異常的捕獲,實現對捕獲到的異常進行處理。

    public static void main(String[] args) {
            int divde = divde(10, 0);
            System.out.println("divide: " + divde);
        }
    
        public static int divde(int a, int b) {
            try {
                int c = a / b; // 可能會出現問題的情況(異常)
                System.out.println("xxx");
                return c;
            } catch (Exception e) {
                System.out.println("我處理了除數為0");
            }
            return 0;
        }

    3.4 finally代碼塊

        finally:有一些特定的代碼無論異常是否發生,都需要執行。另外,因為異常會引發程序跳轉,導致有些語句執行
    不到。而finally就是解決這個問題的,在finally代碼塊中存放的代碼都是一定會被執行的。
       finally代碼參考如下:
         

     public static void main(String[] args) {
            divide(10, 0);
        }
    
        public static int divide(int a, int b) {
            int c = 0;
            try {
                c = a / b;
                System.out.println("cccc");
            } catch (ArithmeticException e) {
                System.out.println("我處理了除數為0...");
                return -1;
            } finally {
                //不管有無異常,最終都會執行
                System.out.println("我一定會走");
            }
    
            return c;
        }



     

    版權聲明:本文為qq_37244567原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_37244567/article/details/87205075

    智能推薦

    Java基礎之-異常處理

    異常處理 異常為我們提供了一種解決問題的機制,有了它我們就可以實現將業務邏輯和異常處理相分離,從而使我們的代碼更加易于維護和理解。 1 Java異常的結構層次 所有的異常類是從 java.lang.Exception 類繼承的子類。 Exception 類是 Throwable 類的子類。除了Exception類外,Throwable還有一個子類Error 。 Error 用來指示運行時環境發生的...

    Java基礎語法之異常

    異常:本身是一個類,產生異常就是創建異常對象并拋出一個異常對象。 異常產生的過程解析: 異常處理的5個關鍵字:try catch finally throw throws throw關鍵字: 作用: 可以使用該關鍵字在指定方法中拋出指定的異常; 使用格式: 注意: 1 throw關鍵字必須寫在方法內部; 2 throw關鍵字后面new的對象必須是Exception或者Exception子類的對象 ...

    java基礎之-------異常詳解

    異常(Throwable) 異常機制是指當程序出現錯誤后,程序如何處理。具體來說,異常機制提供了程序退出的安全通道。當出現錯誤后,程序執行的流程發生改變,程序的控制權轉移到異常處理器。 Throwable 為最頂級的 Error:(錯誤): 是程序無法處理的錯誤,表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,Jav...

    hive 導出數據之一列多行,轉為一行多列

    需求:提取數據 說明:原數據是一列多行,需要轉化為一行多列 待查詢表為:temp_05 待查詢數據為: 待查詢數據如圖: 需要提取的數據表頭如下: 預定日期 昨日價格 前天價格 2018-02-01 2018-02-02 2018-02-03 2018-02-04 可用提數 SQL 數據如圖: 以下為嘗試過程 數據如圖: 數據如圖: 數據如圖: 數據如圖:...

    asp.net做一個簡易的聊天室

    要求: 結果: 關鍵代碼: Default.aspx Default.aspx.cs Default2.aspx Default2.aspx.cs Default3.aspx Default3.aspx.cs Default4.aspx...

    猜你喜歡

    動態SQL和多表關聯-筆記

    《動態SQL與多表關聯》筆記 學習目標 能夠使用動態SQL完成SQL拼接 能夠使用resultMap完成多表查詢 能夠使用一對一查詢 能夠使用一對多查詢 (注:多對多其實就是兩個一個多) 映射文件:為什么要resultMap 目標 定義結果映射 使用結果映射 回顧 在mybatis中有2種配置文件: 核心配置文件,如:sqlMapConfig.xml 實體類映射文件,如:UserMapper.xm...

    【OpenGL C++ UE4】獲取模型頂點及面索引數據,并優化存儲結構供UE4繪制

    目錄 一、功能需求 二、成果 三、環境配置 四、詳細步驟 4.1 Max制作三棱錐并處理 4.2 核心代碼 4.2.1 傳入結構體數據 4.2.2 頂點去重、更新索引 4.2.3 輸出本地CSV文件 4.3 UE4繪制 一、功能需求 想必你肯定會問我一個問題,UE4直接導入模型不好么? 哈哈,前提是在做畢設時,導師提供的只有頂點與面索引數據,沒有模型。 下文詳細介紹了畢設開發中的難點,涉...

    解決Pyinstaller打包numpy和pandas庫文件過大問題

    解決Pyinstaller壓縮numpy和pandas庫文件過大問題 文件包類型和網上的方法 Windows下docker的安裝 在docker下實現打包     今天是2021年的第一天,先祝各位小伙伴現年快樂哈。最近因為做了一個項目,需要打包文件,文件中包含了numpy和pandas庫,結果打包出來幾百行的代碼居然要900m,人都傻了,翻遍了全網找解決方...

    【混沌工程】基于ChaosBlade實現網絡故障模擬

    一、前言 很久之前曾基于linux內核自帶的TC和netem模擬一些公網中遇到的極端情況(延遲、丟包、重復、損壞和亂序等),驗證了我們傳輸程序的健壯性! 具體細節可見這篇老博客: https://blog.csdn.net/u013128262/article/details/84784663 最近在復現kafka生產端一個timeout異常場景時,發現之前方案時因為內核和OS版本問題有些差異而無...

    精品国产乱码久久久久久蜜桃不卡