[第五章、異常處理] 第一節、異常處理基礎

第五章、異常處理

 

第一節、異常處理基礎

       異常(Exception)是指運行時代碼序列中產生的異常情況。換句話說,異常是一個運行時錯誤(runtime error)。在不支持異常處理的計算機語言中,錯誤必須被手工的檢查和處理-----典型的是通過錯誤代碼的運用等等。

       一個VBvisual basic)函數(function)的例子:

Private Function ShowMsg(number As Integer)     傳入Integer類型參數

On Error GoTo ErrHandle                     當出現錯誤時跳到ErrHandle標籤處

                                                        ‘ VB中使用單引號進行註釋                           

        Dim str As String                    ‘ VB中使用Dim來聲明一個變量

        Me.MousePointer = vbHourglass              設置當前窗口鼠標的形狀

        str = "Hello World!"                        設置字符串str的值

        If (number = 10) Then                            當傳入參數等於10

            MsgBox str                                 顯示str字符串

              Else

            MsgBox "參數不是10"

        End If                  

        On Error GoTo ErrHandle2            第二處錯誤處理

        MsgBox number / i            ‘i 沒有被初始化,默認值是0

                                                               這裏產生一個除0錯誤

Exit Function                                     退出函數,如果沒有此語句就會運行

緊接着的錯誤處理的代碼

ErrHandle:                                                

    Me.MousePointer = vbDefault         設置鼠標爲默認形狀

    MsgBox Err.number & Err.Description       當函數中出現錯誤時顯示錯誤編號和描述

       Exit Function

ErrHandle2:

       Me.MousePointer = vbDefault

    MsgBox "這是第二處錯誤處理!"

End Function

 

       上面是VB中一般的錯誤處理形式,VB中一般的錯誤處理代碼都是放在函數的最後。

       Java支持異常處理,在Java中,一個異常(Exception)就是一個對象,所有異常類型都是內置類java.lang.Throwable的子類。Throwable類在異常類層次結構的頂層,緊接着Throwable類下面的是把異常分成兩個不同分支的子類。一個分支是Exception,一個分支是ErrorException類用於用戶程序可能捕捉的的異常情況,它也是你可以用來創建你自己用戶異常類型子類的類。Error類定義了在通常環境下不希望被程序捕獲的異常,常用於Java運行時系統來顯示與運行時系統本身有關的錯誤,它們通常是災難性的致命錯誤,不是你的程序可以控制的,堆棧溢出是這種錯誤的一例。

你可以將程序中你認爲可能會出現錯誤的地方加上異常處理。Java異常處理通過5個關鍵字控制:trycachthrowthrowsfinally。下面介紹try/catch/finally語句,通常形式是:

       try{                     

//這裏包含你認爲可能會出現錯誤的代碼。

 

              //如無問題則代碼會從上到下運行

              //代碼運行時出錯則會拋出異常,

              //可以直接用一個throw語句顯示拋出異常

              //或調用一個拋出異常的方法

       }catch(ExceptionType1 exOb){

              //異常類型1 處理代碼,ExceptionType 是發生異常的類型

       }catch(ExceptionType2 exOb){

              //異常類型2 處理代碼

       }

       …. // try代碼塊後可以有多個catch

       finally{

              //這個語句塊包含了離開try子句後總要執行的代碼

              //1try塊代碼順利執行

//2)由於breakcontinuereturn語句而將要離開try

//3)當上面的catch塊處理了異常

//4)還有未被捕獲的異常

// 如果try塊中沒有調用System.exit()語句,在上面的各種情況下,

//  finally代碼塊一定會被執行。

       }

當我第一次看到Java中的try語句時,我只會一些C語言,也沒什麼編程經驗,於是我納悶了很久,爲什麼要try(嘗試)呢?那麼這段代碼會不會執行?後來才明白怎麼一回事,如果也有初學者不明白的話,你可以將try語句理解成: 嘗試執行後面的代碼,如果無錯誤則會順利通過,否則會尋找與錯誤匹配的catch語句,然後再執行catch內的錯誤處理代碼。

try後面跟多個catch塊時 ,當出現異常,每個catch子句被依次檢查第一個匹配的異常類型的子句被執行,其他catch子句被旁路。要注意的是,異常子類必須在它們任何父類之前使用,因爲運用父類的catch語句將捕獲該類型及其所有子類類型的異常。這樣,後面運行子類的catch語句將永遠不會到達。而且,Java中不能到達的代碼是一個錯誤。

try不能單獨使用,後面至少跟一catch子句或一finally子句;try語句可以被嵌套,也就是說一個try代碼塊內可以包含另一個try代碼塊。每次進入try語句,異常的前後關係都會被推入堆棧,如果一個內部的try語句不含特殊異常的catch處理程序,堆棧將彈出,下一個try語句的catch處理程序將檢查是否與之匹配,這個過程將繼續直到一個catch語句匹配成功,或者是直到所有的嵌套try語句被檢查完。如果沒有catch語句匹配,Java的運行時系統將處理這個異常。
發佈了54 篇原創文章 · 獲贊 0 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章