Java 中 try catch finally 的流程控制
一個方法使用try和catch關鍵字組合來捕獲異常。try/catch塊放置在可能產生異常的程式碼周圍。try/catch塊內的程式碼稱為受保護程式碼,使用try/catch的語法如下:
語法
try {
// Protected code
} catch (ExceptionName e1) {
// Catch block
}易於產生異常的程式碼放在try塊中。當發生異常時,該異常由與其關聯的catch塊處理。每個try塊都應該緊跟一個catch塊或finally塊。
catch語句包含宣告您嘗試捕獲的異常型別。如果在受保護程式碼中發生異常,則檢查try後面的catch塊(或塊)。如果發生的異常型別列在catch塊中,則異常將像引數傳遞到方法引數一樣傳遞到catch塊。
示例
以下是聲明瞭2個元素的陣列。然後程式碼嘗試訪問陣列的第3個元素,這將引發異常。
// File Name : ExcepTest.java
import java.io.*;
public class ExcepTest {
public static void main(String args[]) {
try {
int a[] = new int[2];
System.out.println("Access element three :" + a[3]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception thrown :" + e);
}
System.out.println("Out of the block");
}
}這將產生以下結果:
輸出
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 Out of the block
多個Catch塊
try塊後面可以跟多個catch塊。多個catch塊的語法如下:
語法
try {
// Protected code
} catch (ExceptionType1 e1) {
// Catch block
} catch (ExceptionType2 e2) {
// Catch block
} catch (ExceptionType3 e3) {
// Catch block
}前面的語句演示了三個catch塊,但在單個try之後可以有任意數量的catch塊。如果在受保護程式碼中發生異常,則異常將被拋到列表中的第一個catch塊。如果丟擲的異常的資料型別與ExceptionType1匹配,則它將在那裡被捕獲。如果不是,則異常將傳遞到第二個catch語句。這將繼續進行,直到異常被捕獲或穿過所有catch,在這種情況下,當前方法將停止執行,並且異常將被拋到呼叫堆疊上的前一個方法。
示例
這是一個程式碼段,展示瞭如何使用多個try/catch語句。
try {
file = new FileInputStream(fileName);
x = (byte) file.read();
} catch (IOException i) {
i.printStackTrace();
return -1;
} catch (FileNotFoundException f) // Not valid! {
f.printStackTrace();
return -1;
}捕獲多種型別的異常
從Java 7開始,您可以使用單個catch塊處理多個異常,此功能簡化了程式碼。以下是執行此操作的方法:
catch (IOException|FileNotFoundException ex) {
logger.log(ex);
throw ex;Finally塊
finally塊位於try塊或catch塊之後。無論是否發生異常,finally塊中的程式碼始終都會執行。
使用finally塊允許您執行任何您想要執行的清理型別語句,無論受保護程式碼中發生什麼。
finally塊出現在catch塊的末尾,並具有以下語法:
語法
try {
// Protected code
} catch (ExceptionType1 e1) {
// Catch block
} catch (ExceptionType2 e2) {
// Catch block
} catch (ExceptionType3 e3) {
// Catch block
}finally {
// The finally block always executes.
}示例
public class ExcepTest {
public static void main(String args[]) {
int a[] = new int[2];
try {
System.out.println("Access element three :" + a[3]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception thrown :" + e);
} finally {
a[0] = 6;
System.out.println("First element value: " + a[0]);
System.out.println("The finally statement is executed");
}
}
}這將產生以下結果:
輸出
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 First element value: 6 The finally statement is executed
注意以下幾點:
catch子句不能沒有try語句。
只要存在try/catch塊,就不必有finally子句。
try塊不能沒有catch子句或finally子句。
任何程式碼都不能出現在try、catch、finally塊之間。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP