[第五章]第二節、異常處理實例分析

第二節、異常處理實例分析

以下是Java中一個錯誤處理的例子:

[MultiCatch.Java]

package Examples;

public class MultiCatch{

       public static void main(String[] args){

              try{

                     int a=args.length;        //將字符串數組args的長度賦給int變量a

                     System.out.println("args的長度是 "+a);              // 打印a 的值

                     int b=36/a;              //a36,當main方法無參數傳入時會出現被零除錯誤

                     System.out.println("args的第2個參數是: "+args[1]);  //打印args第二個參數,

              }catch(ArithmeticException e){

                     System.out.println("無參數傳入,args.length=0,出現錯誤 ");

                     System.out.println("Divide by 0: "+e);

              }catch(ArrayIndexOutOfBoundsException e){

                     System.out.println("傳入參數少於2個,出現錯誤 ");

                     System.out.println("Array Index Out of Bounds: "+e);

              }finally{

                     System.out.println("finally代碼塊:無論有無異常,這裏仍然會執行");

              }

              System.out.println(“程序沒有被終止!”);

       }

}

 

下面是運行在三種不同情況下程序的輸出:

 

C:/javaApp>java Examples.MultiCatch

a = 0

無參數傳入,args.length=0,出現錯誤

Divide by 0: java.lang.ArithmeticException: / by zero

finally代碼塊:無論有無異常,這裏仍然會執行

程序沒有被終止!

 

C:/javaApp>java Examples.MultiCatch test01

a = 1

傳入參數少於2個,出現錯誤

Array Index Out of Bounds: java.lang.ArrayIndexOutOfBoundsException: 1

finally代碼塊:無論有無異常,這裏仍然會執行

程序沒有被終止!

 

C:/javaApp>java Examples.MultiCatch test01 test02

a = 2

args的第2個參數是: test02

finally代碼塊:無論有無異常,這裏仍然會執行

程序沒有被終止!

 

對比VBJava中的異常處理,我們可以要發現Java中的異常處理機制非常靈活和方便,而且不會中止程序的運行。但要注意的是,如果程序中出現異常時,我們沒有爲我們的程序提供異常處理,或找不到匹配的異常處理程序,那麼異常最終會被Java運行時系統的默認處理程序捕獲並終止程序運行。默認處理程序顯示一個描述異常的字符串,打印異常發生處的堆棧軌跡並且終止程序。你可以嘗試將上面例子中的第二個catch塊去掉,那麼運行在只有一個參數的情況下會出現錯誤,而且try/catch/finally代碼塊後的語句: System.out.println(“程序沒有被終止!”);  將不會執行。

 如果一個finally塊中出現或拋出(throw)了一個異常,那麼這個異常會代替前面try代碼塊任何正在被拋出過程中的異常。如果一個finally塊內使用一個return語句,那麼即使一個異常已經被拋出並且還沒有處理,這個方法也會正常返回。

 

下面是另外一個例子:

[ExceptionDemo.java]

 

package Examples;

import java.util.Random;              //導入 Random

public class ExceptionDemo{

       public static void main(String[] args){

              int a=0,b=0,c=0;

              Random r=new Random();  //創建Random類的一個實例

              for(int i=0;i<10;i++){

                     try{

                            b=r.nextInt();      //使用Random類實例的nextInt()方法來獲取一個隨機

                            c=r.nextInt();    // int 類型整數

                            a=12345/(b/c);     // cb,結果用來除12345,以增加被零除錯誤機會

                     }catch(ArithmeticException e){

                            //  e.printStackTrace();  這個語句被我註釋掉了,它的作用後面有講

                            System.out.println("Division by zero."); // 打印出錯誤,

                            a=0;                      //這裏設置a爲零

                     }

                     System.out.println(" a is : "+a);

              }

       }

}                  

編譯運行後的某次輸出如下(每次運行的結果都不相同):

 

a is : -2469

a is : -12345

a is : -6172

a is : -6172

a is : -1234

a is : 12345

Division by zero.

a is : 0

a is : -6172

a is : -12345

Division by zero.

a is : 0

 

上面程序中的“e.printStackTrace();”語句如果沒有註釋掉的話,那麼在每句“Division by zero.”前會輸出:

java.lang.ArithmeticException: / by zero

        at Examples.ExceptionDemo.main(ExceptionDemo.java:11)

java.lang.ArithmeticException指明異常類型,後面的“/ by zero”是具體異常描述

Examples.ExceptionDemo.main指明異常在Examples包中的ExceptionDemomain方法中

最後指明java文件名稱及出現錯誤代碼位置:ExceptionDemo.java 中的第11行。
發佈了54 篇原創文章 · 獲贊 0 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章