java 的異常處理機制,執行順序;return在異常中的使用 ;自定義異常類的簡單應用


異常處理2種方法:

1.拋 (throws)
2.自己處理try/catch/finally

 

1.拋出:向上一級拋出,異常實際沒有被解決掉

2.try/catch/finally


(1)正常執行

public class Test1 {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.say();
    }
    public void say() {
        String str = "123";
        try {
        System.out.println(Integer.parseInt(str));
        System.out.println("正常執行");
        //return;
        }catch(Exception e) {
            System.out.println("有異常");
            //return;
        }finally {
            System.out.println("finally");
            //return;
        }
    }
}
123
正常執行
finally

(2)異常情況:

public class Test1 {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.say();
    }
    public void say() {
        String str = "abc";
        try {
        System.out.println(Integer.parseInt(str));
        System.out.println("正常執行");
        //return;
        }catch(Exception e) {
            System.out.println("有異常");
            //return;
        }finally {
            System.out.println("finally");
            //return;
        }
    }
}
有異常
finally

結論:finally是一定會被執行的!因此,finally通常用於釋放資源,在IO流操作和數據庫操作中

   程序沒有報錯,執行了 try 和 finally 代碼塊

         程序報錯了,執行try catch finally 代碼塊

那么這里就有一個問題,執行的先后順序?

這里我們需要連接一個關鍵字return!

Java中的return有兩方面的用途:

(1)返回方法指定類型的值(前提是方法的返回值類型不是void)。

(2)方法的結束,它會導致當前的方法退出。


通過return我們去探究一下,try catch finally的執行先后順序!

public class Test1 {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() {
        String str = "123";
        try {
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) {

            return "catch";
        } finally {
            return "finally";
        }
    }
}

結果為:finally

public class Test1 {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() {
        String str = "abc";
        try {
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) {

            return "catch";
        } finally {
            return "finally";
        }
    }
}

結果也是finally

這是為什么?finally是必定執行的代碼塊!所有finally邏輯上雖然能使用return,但一般finally不會接return。否則你什么也測不出來

 

public class Test1 {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() {
        String str = "abc";
        try {
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) {
            System.out.println("catch");
            return "catch";
        } finally {
            System.out.println("finally");
        }
    }
}
catch
finally
catch

由此可以看出執行的順序為:

 (1)Integer.parseInt(str);
(2)
System.out.println("catch");
(3)
System.out.println("finally");
(4)return "catch";
同理其他:
public class Test1 {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() {
        String str = "abc";
        try {
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) {
            System.out.println("catch");
            return "catch";
        } finally {
            System.out.println("finally");
            return "finally + return";
        }
    }
}
catch
finally
finally + return

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM