動手動腦11.12
一
.動手動腦:請閱讀並執行AboutException.java示例,然後通過後面的幾頁PPT瞭解Java中實現異常處理的基礎知識
import javax.swing.*;
class AboutException {
public static void main(String[] a)
{
int i=1, j=0, k;
k=i/j;
try
{
k = i/j; // Causes division-by-zero exception
//throw new Exception("Hello.Exception!"); }
catch ( ArithmeticException e)
{
System.out.println("被0除. "+ e.getMessage());
}
catch (Exception e)
{
if (e instanceof ArithmeticException)
System.out.println("被0除");
else {
System.out.println(e.getMessage());
}
}
finally
{
JOptionPane.showConfirmDialog(null,"OK");
}
}
}
catch語句塊中的程式碼用於處理錯誤。當異常發生時,程式控制流程由try語句塊跳轉到catch語句塊。不管是否有異常發生,finally語句塊中的語句始終保證被執行。
可以有多個catch語句塊,每個程式碼塊捕獲一種異常。在某個try塊後有兩個不同的catch 塊捕獲兩個相同型別的異常是語法錯誤。
使用catch語句,只能捕獲Exception類及其子類的物件。因此,一個捕獲Exception物件的catch語句塊可以捕獲所有“可捕獲”的異常。
將catch(Exception e)放在別的catch塊前面會使這些catch塊都不執行,因此Java不會編譯這個程式。
二
動手動腦:多層的異常捕獲-1,閱讀以下程式碼(CatchWho.java),寫出程式執行結果:
執行結果:
ArrayIndexOutOfBoundsException/內層try-catch
發生ArithmeticException
三
動手動腦:多層的異常捕獲-2,寫出CatchWho2.java程式執行的結果
ArrayIndexOutOfBoundsException/外層try-catch
四
請先閱讀 EmbedFinally.java示例,再執行它,觀察其輸出並進行總結。
執行結果如下
當有多層巢狀的finally時,異常在不同的層次丟擲 ,在不同的位置丟擲,可能會導致不同的finally語句塊執行順序。
五‘
.辨析:finally語句塊一定會執行嗎?
請通過 SystemExitAndFinally.java示例程式回答上述問題
public class SystemExitAndFinally {
public static void main(String[] args) {
try{
System.out.println("in main");
throw new Exception("Exception is thrown in main"); //System.exit(0);
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.exit(0);
}
finally
{
System.out.println("in finally");
}
}
}
finally語句塊一定會執行