try、catch和finally
-
try塊:用於捕獲異常。
- 後面可以有0個或多個catch塊。
- 只能有0個或1個finally塊。
- try塊後面,如果沒有catch塊,則後面必須有一個finally塊。
- 執行代碼捕獲異常後,進入catch塊,try中出現異常代碼處後面的代碼不會再繼續執行。
-
catch塊:用於處理處理try中捕獲的異常。
- 可以有多個catch塊,進入一個catch塊後,執行完畢後,如果有finally塊,則進入finally塊。即使後面還有catch塊,也不會再進入其他catch塊。
-
finally塊:無論是否捕獲或處理異常,finally塊中的代碼都會被執行。
- 當try塊中或者catch塊中遇到return語句時,先執行完finally裏面的代碼後,再執行return返回語句。
可以有多個catch塊,並且try塊後面,只能有0個或1個finally塊
public static void main(String[] args) {
try {
System.out.println("try...");
}catch (ArithmeticException e){
System.out.println("ArithmeticException...");
}catch (NullPointerException e){
System.out.println("NullPointerException...");
}
finally {
System.out.println("finally...");
}
}
//輸出結果:
//try...
//finally...
try塊後面,如果沒有catch塊,則後面必須有一個finally
public static void main(String[] args) {
try {
System.out.println("try...");
}
finally {
System.out.println("finally...");
}
}
//輸出結果:
//try...
//finally...
執行代碼捕獲異常後,進入catch塊,try中出現異常代碼處後面的代碼不會再繼續執行
public static void main(String[] args) {
try {
System.out.println("try...");
int a = 0;
String str = null;
System.out.println(str.toString());
a = a / 0;
} catch (ArithmeticException e) {
System.out.println("ArithmeticException...");
} catch (NullPointerException e) {
System.out.println("NullPointerException...");
} finally {
System.out.println("finally...");
}
}
//輸出結果:
//try...
//NullPointerException...
//finally...
當try塊中或者catch塊中遇到return語句時,先執行完finally裏面的代碼後,再執行return返回語句。
public static void main(String[] args) {
try {
System.out.println("try...");
return;
} catch (ArithmeticException e) {
System.out.println("ArithmeticException...");
} catch (NullPointerException e) {
System.out.println("NullPointerException...");
} finally {
System.out.println("finally...");
}
}
//輸出結果:
//try...
//finally...
public static void main(String[] args) {
try {
System.out.println("try...");
int a = 0;
a = a / 0;
} catch (ArithmeticException e) {
System.out.println("ArithmeticException...");
return;
} catch (NullPointerException e) {
System.out.println("NullPointerException...");
} finally {
System.out.println("finally...");
}
}
//輸出結果:
//try...
//ArithmeticException...
//finally...