Java異常處理機制:try...catch...的執行流程


Java異常處理機制:try...catch...的執行流程

在項目中遇到try...catch...語句,因為對Java異常處理機制的流程不是很清楚,導致對相關邏輯代碼不理解。所以現在來總結Java異常處理機制的處理流程:

1.異常處理的機制如下:

  1. 在方法中用 try... catch... 語句捕獲並處理異常,catch 語句可以有多個,用來匹配多個不同類型的異常。
  2. 對於處理不了的異常或者要轉型的異常,在方法的聲明處通過 throws 聲明異常,通過throw語句拋出異常,即由上層的調用方法來處理該異常。
try {
    邏輯程序塊
} catch(ExceptionType1 e) {
    處理代碼塊1
} catch (ExceptionType2 e) {
    處理代碼塊2
    throw(e);    // 再拋出這個"異常"
}

注:如果有異常發生,只會進入到一個catch語句塊中

2.Exception 是程序正常運行過程中可以預料到的意外情況,並且應該被開發者捕獲,進行相應的處理。

Exception 可以以兩種方式出現:

  1. 一是發生在程序編譯時或運行時發生異常,是被程序拋出,用戶沒有主動拋出異常;
  2. 二是用戶主動拋出異常,使用throw關鍵字主動拋出異常。該異常可以是業務邏輯的異常。
try {
    // 可能發生異常的語句
} catch(ExceptionType e) {
    // 處理異常語句
}   

3.執行流程

try語句塊中發生了異常

如果try語句塊中發生了異常,那么程序就會把對應的異常對象拋出,然后catch語句就會捕獲該異常並且處理。

注意:如在try語句塊的第二句語句發生異常,那么在第二句以后的語句都不會執行了,轉到catch語句塊中開始執行。處理完catch語句塊的內容,就會執行catch語句塊之后的內容

try語句塊中沒有發生異常

如果try語句塊中沒有發生異常,那么try語句塊中的內容會由上到下依次執行,然后catch語句塊會全部被跳過,接下來執行catch語句塊之后的內容。

舉個栗子:
public class ExceptionTest {
    public static void main(String[] args) {

        for (int i = 0; i < 3; i++) {
            String message = "";
            int a = 0;
            try{
                if (i == 1){
                    throw new Exception("錯誤");
                }
                message = "正確";
                a= 123;
            }catch (Exception e){
                message = e.getMessage();
            }
            System.out.println( "i 等於" + i);

            System.out.println(message );
            System.out.println("a = " + a+ "\n");
        }
    }
} 

輸出結果分析:

當有i = 2時,用戶主動拋出異常,可以看到為 message = "正確"; a =123;的賦值語句沒有執行, 進入到catch語句塊中,然后再執行catch語句塊以后的內容 message = e.getMessage(); 這里message = "錯誤",因為 throw new Exception("錯誤"); 在拋出異常時賦值了message為"錯誤";

因此:
message = "錯誤"
a = 0
輸出結果
i 等於0
正確
a = 123

i 等於1
正確
a = 123

i 等於2
錯誤
a = 0

  


免責聲明!

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



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