2021年8月26日 星期四

JAVA 例外處理-01 try、catch、finally

例外處理的目的是為了避免程式崩潰,可以處理的例外有數學運算產生的,例如除以 0 、陣列索引在設定之外產生的、儲存陣列元素的型態不符產的、呼叫方法時,參數型態不同產生的、物件值為 null 產生的。

主程式 

public class Main {
public static void main(String[] args){
int i,j;
j=0;

try{
for (i = 2; i > -100; i--){
System.out.println("i= " + i + ",則 10/i = " + 10/i);
j=j+1;
}
// 如果沒有問題的話,程式會跑完迴圈,但這邊故意設了一個會除以 0 的情況,
// 該情況下會出錯,所以 catch 段的程式會執行,而且迴圈只會執行到此斷點。

System.out.println("出現此行,表示迴圈有跑完。");
// 實際上上面這一行不會出現在結果中,因為更前面已經出現例外了。
}
catch (ArithmeticException gg){
// 如果沒有例外,此區塊的程式碼不會被執行。
// 這邊的 gg 是送到 catch 方法裡面的 ArithmeticException 物件名稱,
// 名字可以隨便取。
System.out.println("例外說明:" + gg.getMessage());
// 展示 gg 物件得到的系統訊息。
System.out.println("例外原因:");
gg.printStackTrace();
// 有了上面這一行,出現例外的情況下,程式在執行完後會顯示程式呼叫的執行過程。
}
finally {
System.out.println("例外處理結束!迴圈共跑了 " + j + " 次。");
// 無論有沒有例外,上面這一行都會出現,表示此區程式一定會執行。
}

System.out.println("程式結束!");
}
}

結果:

i= 2,則 10/i = 5
i= 1,則 10/i = 10
例外說明:/ by zero
例外原因:
例外處理結束!迴圈共跑了 2 次。
程式結束!
java.lang.ArithmeticException: / by zero
	at Main.main(Main.java:8)

Process finished with exit code 0

其中 catch 的區塊可以有好幾個,最保險的方式是 try 區塊中的程式可能出現多少種例外,就有多少個 catch 來以確保程式不會崩潰。

沒有留言:

張貼留言