• 沒有找到結果。

使用throw關鍵字 (1)

雖然Java語言已經提供了相當多的例外類別,但有時候,為了設計出更User Friendly的程 式,我們可能需要自己設計例外處理的機制。在探討如何自定例外之前,我們要先了解 throw關鍵字的使用

「throw」關鍵字用在方法的內部,請不要和用於方法宣告時的「throws」關鍵字混為 一談。如果在方法內部想要丟出例外的類別物件時需使用「throw」關鍵字。為了能夠 自定例外類別,我們先了解Exception類別產生物件的方式。常用的Exception類別的建構

子有: 建構子 作用

Exception() 建立一個Exception

Exception(String message) 建立一個Exception物件,並指定例外 訊息為message

Exception

(String message, Throwable cause)

建立一個Exception物件,並指定例外 訊息為message,同時將產生例外的原 因cause傳入

Exception(Throwable cause) 建立一個Exception物,同時將產生例 外的原因cause傳入

throw關鍵字可以用來丟出例外物件,它可以丟出Java內部的例外物件,也可以丟出自定 的例外物件,throw的語法如下:

throw 例外物件; //丟出Java例外物件

使用throw關鍵字 (2)

程式9-6 : Chap9\Throw1.java 01: public class Throw1{

02: public static void main(String[] args) { 03: tryToCalculate(10, 0);

04: tryToCalculate(10, 2);

05: } 06:

07: public static void tryToCalculate(int x, int y) { 08: if (y == 0) {

09: try {

10: throw new Exception("Divided by Zero!!!");

11: }catch (Exception e) {

12: System.out.println(e.toString());

13: } 14: } else {

15: System.out.println("The Result is : " + x / y);

16: } 17: } 18: }

執行的結果為:

範例程式在第10行使用了throw來丟出一個自定的例外物件,因為throw會產生例外物件,

所以程式必需使用「try-catch」來捕捉產生的例外。Exception中的「除數不得為零!!!」

的訊息會在例外物件產生時傳入該物件中。你也可以不需要直接處理這個例外物件,但 是要再將這個物件丟出來,例如改寫範例程式的第11~13行為:

使用throw關鍵字 (3)

catch (Exception e) { throw e;

}

如果是用這樣的處理方式,則必需要有另一個程式來呼叫main方法,並且在該程式中使 用「try-catch」來處理例外

01: class MyException extends Exception{

02: private int value;

03: MyException (int value){

04: this.value = value;

05: }

06: public String toString(){

07: String s = "本程式執行無效\n" +

08: "錯誤代碼為 " + value + " \n" + 09: "請將此代碼告知管理人員\n";

10: return s;

11: } 12: }

自定例外類別 (1)

MyException類別繼承自Exception類別,第3行的建構子需要傳入一個整數值當作是自 定的錯誤代碼。程式的第6~11行改寫了toString()方法,新的toString()方法會顯示出錯 誤代碼及相關的訊息

自定例外類別 (2)

再來,以下的程式碼示範如何丟出MyException類別的例外訊息:

01: public static void tryToCalculates (int x, int y){

02: if (y == 0){

03: try{

04: throw new MyException(0);

05: } catch (MyException e){

06: System.out.println(e.toString());

07: } 08: } else {

09: System.out.println("結果為: " + x / y);

10: } 11: }

tryToCalculates(int x, int y)方法會計算兩數相除的結果,但是除數y不可以為0,如果y 的值為0,在程式的第4行會丟出MyException類別的例外,並指定錯誤代碼為0。程式 的第5行會捕捉這個例外物件,並且在第6行利用toString()方法顯示錯誤訊息

自定例外類別 (3)

main()的內容:

程式9-7:Chap9/Throws2.java 01: public class Throw2{

02: public static void main (String[] args) { 03: tryToCalculates(10, 0);

04: tryToCalculates(10, 2);

05: } 06: }

程式的執行結果為:

第3行的程式碼由於傳入的參數會 導致除數為0的情況,該行程式會 引發們定的MyException例外物件,

並顯示自訂的錯誤訊息

課堂練習 PT81

例外練習 (PT81.java):

設計一個程式在執行時需要輸入一個整數數值。

請考慮可能產生的例外情況,例如:未輸入數值,

數值格式不正確等情形。如果例外產生,請使用

throw 的方式直接丟出例外,並顯示相關訊息。如果

沒有例外產生,請利用該數值計算正方形的面積。

相關文件