1. 程式人生 > >動手動腦11.12

動手動腦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語句塊一定會執行