請先閱讀 EmbedeFinally.java示例,再運行它,觀察其輸出並進行總結java
源代碼:spa
public class EmbededFinally { 對象
public static void main(String args[]) { blog
int result; 資源
try { get
System.out.println("in Level 1"); io
try { class
System.out.println("in Level 2");程序
// result=100/0; //Level 2 方法
try {
System.out.println("in Level 3");
result=100/0; //Level 3
}
catch (Exception e) {
System.out.println("Level 3:" + e.getClass().toString());
}
finally {
System.out.println("In Level 3 finally");
}
// result=100/0; //Level 2
}
catch (Exception e) {
System.out.println("Level 2:" + e.getClass().toString());
}
finally {
System.out.println("In Level 2 finally");
}
// result = 100 / 0; //level 1
}
catch (Exception e) {
System.out.println("Level 1:" + e.getClass().toString());
}
finally {
System.out.println("In Level 1 finally");
}
}
}
解鎖的方法寫在finally{}中不管上面是否有異常都會執行這裏面的代碼
public class EmbededFinally {
public static void main(String args[]) {
int result;
try {
System.out.println("in Level 1");
try {
System.out.println("in Level 2");
result=100/0; //Level 2
try {
System.out.println("in Level 3");
result=100/0; //Level 3
}
catch (Exception e) {
System.out.println("Level 3:" + e.getClass().toString());
}
finally {
System.out.println("In Level 3 finally");
}
result=100/0; //Level 2
}
catch (Exception e) {
System.out.println("Level 2:" + e.getClass().toString());
}
finally {
System.out.println("In Level 2 finally");
}
result = 100 / 0; //level 1
}
catch (Exception e) {
System.out.println("Level 1:" + e.getClass().toString());
}
finally {
System.out.println("In Level 1 finally");
}
}
}
總結:Java經過使用try…catch…finally語句來捕獲一個或多個異常,catch語句能夠有一個或多個,並且至少要一個catch語句或finally。若是某處發生異常,則try語句中此處以後的代碼都不會被執行,如:
Try{
String s=」abc」;
int i=Integer.parseInt(s);
int a=i+10;
}
當程序運行時,異常發生,則try語句拋出異常對象,a=i+10;此語句位於異常發生處以後,不會被執行。
Finally語句用法:因爲當異常發生時,已經分配的資源會保持原來的狀態,不能被釋放,因此finally語句主要用來釋放和清理有關的資源或善後工做,如關閉打開的文件等。Finally語句是一個統一的出口,即不管try語句中是否發生異常,也不管catch語句的的異常類型與try語句拋出的異常的類型是否匹配,finally語句中的代碼都要被執行。Finally語句不是必需的,若在某些場合中不須要釋放資源,那麼try…catch語句中能夠沒有finally語句。