资源描述:
《《例外处理》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第14章例外處理1本章提要14-1甚麼是例外?14-2try/catch/finally敘述14-3抛出例外14-4自訂例外類別14-5綜合演練2前言在整個程式的生命週期中,難免會發生一些問題或錯誤,大概可分為以下幾類:編譯時期錯誤:這是在程式開發過程中所發生的,例如初學者最常遇到的語法錯誤就屬於其中一。像是寫程式時忘了在敘述後面加分號、變數名稱打錯等等,如此一來在編譯程式時就無法編譯成功,因此稱之為編譯時期錯誤(compiler-timeerror)。3前言邏輯錯誤:這種錯誤是指程式雖能編譯成功、也能正常執行
2、,但執行的結果卻不是我們所預期的。換言之是程式的邏輯有問題所產生的錯誤,例如您要寫一個程式計算球體體積,但將計算公式轉成程式的形式時,不小心打錯了,導致計算結果不正確,這就是一種邏輯錯誤。4前言執行時期錯誤:此錯誤也是在程式編譯成功後,於執行階段發生的錯誤,但執行時期錯誤(run-timeerror)是指程式本身邏輯沒有問題,但在執行時發生當初設計程式時,未預期的狀況,導致程式無法正常執行的情形。舉例來說,如果程式中有除法運算,但用來當除數的整數變數其值為0(可能是使用者輸入錯誤),就會使程式發生除以0的錯誤。
3、5前言本章要介紹的例外處理,就是要處理執行時期錯誤,讓我們的程式即使遇到突發狀況時,也能執行完成。614-1甚麼是例外?簡單的說,程式執行時期,所發生的不可預期錯誤就可稱為例外(Exception)。發生例外時,Java程式將會不正常中止,輕則讓使用者覺得程式有問題、重則導致使用者的資料毀損/喪失。為了讓Java程式設計人員能設計出安全可靠(robust)的程式,不會因例外發生,程式就什麼事都不能做,因此Java語言特別內建了例外處理的功能。7有狀況:引發例外在第二章曾介紹過,Java程式是在Java虛擬機器(
4、JVM)中執行的。在預設的情況下,當程式執行時發生例外,JVM就會攔截此例外狀況,並拋出(throw)此例外事件。8例外案例之一:使用者輸入錯誤使用者輸入非程式預期資料,而導致例外,是典型的例外案例。在前幾章我們都有使用到由鍵盤取得使用者輸入的範例程式,而只要我們故意輸入非程式所需的資料,就會發生例外。例如下面這個第6章的畫三角形範例:9例外案例之一:使用者輸入錯誤10例外案例之一:使用者輸入錯誤11例外案例之一:使用者輸入錯誤12例外案例之一:使用者輸入錯誤由於第13行呼叫的Integer.parseInt(
5、)方法只能解讀以數字構成的字串,而我們故意輸入文字或是有小數點的數字,就會導致程式無法解讀,而引發例外(另一種說法是:拋出例外)。此時Java會顯示一連串例外的相關訊息,並中止程式執行(另一說法是執行緒被終止,關於執行緒請見下一章),因此第15行以下的程式也不會執行到。13例外案例之一:使用者輸入錯誤在例外訊息中,可看到例外所屬的『例外類別』:14例外案例之二:程式設計不當另一種可能引發例外的情況是程式設計不當,例如在第8章介紹陣列時提過,當程式中使用的元素索引碼超出陣列範圍,就會產生例外:15例外案例之二:程
6、式設計不當16例外案例之二:程式設計不當從執行結果我們可以看到,當程式執行到i的值等於4的時候,由於4已超出陣列元素的索引範圍,所以執行到第8行程式時,存取a[i](相當於a[4])的動作就會引發例外。17例外案例之二:程式設計不當同樣的,這個範例也是在Java輸出一長串的訊息後,程式就停止執行了,因此第10行的敘述也不會被執行到。這個範例所引發的例外,所屬的類別和前一個例子也不同:18Java程式處理例外狀況的方式例外處理流程例外類別19例外處理流程當程式執行時發生了例外,Java會拋出(throw)例外,也
7、就是將例外的相關資訊包裝在一個例外物件之中,然後丟給目前執行的方法來處理,此時會有兩種狀況:如果方法中沒有處理這個例外的程式碼,則轉向呼叫者(呼叫該方法的上一層方法)尋找有無處理此例外的程式碼。若一直找到最上層的main()都沒有處理這個例外的程式碼發生時,該程式將會停止執行。20例外處理流程若程式中有處理這個例外的程式碼,則程式流程會跳到該處繼續執行(詳細流程請參見下一節說明)。以前面陣列索引碼超出範圍的例子而言,該例外是在main()方法中拋出的,所以Java會看main()中是否有處理該例外的處理程式,以
8、便將例外物件拋給它處理。21例外處理流程不過在我們的範例程式中當然是沒有任何例外處理程式,而main()又是最上層的方法(畢竟程式是由它開始執行的),所以這個例外只好由Java自己來處理,而它的處理方式很簡單,就是印出一段有關該例外的訊息,並終止程式的執行,由前面的執行結果即可印證。22例外處理流程如果希望例外發生時,程式不會莫名其妙的停止執行,就必須加入適當的例外處理程式。以陣列索引