Java語言異常處理學習筆記
學習過java的都知道異常處理的框架:
它的執行過程一般分為兩條線:
1.try語句塊中沒有異常,則正常執行try語句塊,catch和finally中的語句不被執行。
2.try語句中有異常,則執行到異常的那句程式碼後立馬跳到catch語句塊去匹配,匹配到對應的Exception之後進入到相應的語句塊中去執行。
3.finally語句塊中的程式碼通常總是會執行。
下面寫幾段很相似的程式碼:
public class TryCatch {
public static void main(String[] args) {
try{
int i = 1/0;
} catch(Exception e) {
System.out.println("exception");
} finally {
System.out.println("finally");
}
}
}
執行結果:
跟上面描述的一樣,try中發現異常,先走catch,然後走finally
public class TryCatch {
public static void main(String[] args) {
try{
int i = 1/0;
System.exit(-1);
} catch(Exception e) {
System.out.println("exception");
} finally {
System.out.println("finally");
}
}
}
執行結果:
這說明異常發生時之後的程式碼是不會執行的,否則會出現下面的結果
public class TryCatch {
public static void main(String[] args) {
try{
int i = 1/1;
System.exit(-1);
} catch(Exception e) {
System.out.println("exception");
} finally {
System.out.println("finally");
}
}
}
執行結果:
如果try語句塊中沒有異常的話,程式碼中有退出程式的語句的話finally語句塊不會被執行,直接退出程式
public class TryCatch {
public static void main(String[] args) {
try{
int i = 1/1;
} catch(Exception e) {
System.out.println("exception");
} finally {
System.out.println("finally");
}
}
}
執行結果:
try語句塊中沒有異常同時沒有退出程式語句,則finally語句塊依然要被執行
public class TryCatch {
public static void main(String[] args) {
try{
int i = 1/0;
} catch(Exception e) {
System.out.println("exception");
System.exit(-1);
} finally {
System.out.println("finally");
}
}
}
執行結果:
如果catch語句塊中出現退出程式語句,則finally語句塊不會被執行
綜上,一個簡單的異常處理機制也是有很多好玩的東西值得去探索的。