Java 異常處理六

azz發表於2007-08-23
Java 異常處理六[@more@]  “throw”語句

  所有的方法都使用“throw”語句來丟擲一個異常。Throw語句需要一個單獨throwable物件,這個物件是任意Throwable類的子類。如下類所示:

   throw someThrowableObject;
   讓我們在程式的上下文中來看一下throw語句。下面的pop方法把來自於一個公共堆疊中的一個執行類給刪除。這個方法從堆疊上面的元素,並且返回被刪除的物件。

   public Object pop() throws EmptyStackException {
   Object obj;
   if (size == 0) {
   throw new EmptyStackException();
   }
   obj = objectAt(SIZE - 1);
   setObjectAt(SIZE - 1, null);
   size--;
   return obj;
   }
   pop方法檢查堆疊上是否有元素。如果堆疊是空的(也就是說它的尺寸等於0),pop方法就會例項化一個新的EmptyStackException物件(它是java.util中的一個成員),並且丟擲它。在這章的後面一節會解釋怎樣建立自己的異常類。對於現在,你所需要記住的是你只能丟擲繼承於java.lang.Throwable類的物件。

   注意,pop方法的宣告中包含了一個throws子句。EmptyStackException是一個檢查性異常,並且pop方法沒有捕捉這個異常。因此,這個方法必須使用throws子名來宣告它所丟擲的異常的型別。

   Throwable 類和它的子類
   繼承Throwable類的物件包括直接子類(直接繼承於Throwable類的物件)和間接子類(繼承於Throwable類的子類的物件)。下圖說明了Throwable類的層次關係和最主要的一些子類。象你看到的一樣,Throws有兩個直接的子類:Error類和Exception類。

   Error類
   當在Java虛擬機器中發生動態連線失敗或其它的定位失敗的時候,Java虛擬機器丟擲一個Error物件。典型的簡易程式不捕獲或丟擲Errors物件。

   Exception類
   大多數程式都丟擲或捕獲衍生於Exception類的物件。一個異常表明發生了一個問題,但它不是嚴重的系統問題。你編定的大多數程式將會丟擲或捕獲Exceptions物件(而不是Errors物件)。

   在Java平臺中Exception類有許多已經定義了的子類。這些子類說明所發生的異常的各種型別。例如,IllegalAccessException異常類說明了不能找到一個特殊的方法;NegativeArraySizeException異常類說明程式試圖建立一個帶有負尺寸的陣列。

   有一個特殊的Exception子類:RuntimeException。這個子類是在程式執行期間在Java虛擬機器內部所發生的異常。例如NullPointerException類就是一個執行時異常類,在一個方法試圖透過一個null引用來訪問一個物件的成員時會發生這個異常。在Unchecked Exceptions---The Controversy這一節中,我們會討論為什麼典型的程式不應該丟擲執行時異常或RuntimException類的子類異常物件。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10901326/viewspace-965500/,如需轉載,請註明出處,否則將追究法律責任。

相關文章