iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
  • 程式執行的過程中所引發的例外,都是由Java虛擬機器(JPM)依據錯誤狀況而自動產生病拋出例外,不過除了這些「自動」產生的例外,我們當然也可以在程式中自行產生病拋出例外。

拋出例外

(1) throw:在程式中拋出一個例外物件。
(2) throws:宣告某一類別的方法,指定該方法可以被拋出。

throw

  • 拋出的例外可以式既有的物件,也可以是使用new建構的自訂例外物件。
    程式範例試做:
public class Alex1001_1 {
    static float division(int num1, int num2){
        float ans=0;
        try{
            if (num2==0)
                throw new ArithmeticException("發生除數為0的錯誤");
            ans=(float)num1/num2;
        
        }catch(Exception e){
            System.out.println("程式錯誤,錯誤原因:"+e.getMessage() );
        }finally{
            return ans;
        }
    }
    public static void main(String args[]){
        System.out.println("12/0="+division(12,0));
    }
}

程式執行結果:

程式錯誤,錯誤原因:發生除數為0的錯誤
12/0=0.0

throws

  • 如果在方法內的程式發生例外,但該方法沒有try...catch的例外處理,此時就可以在該方法的宣告中使用throws指令將例外拋出。
    1.方法拋出單一例外
    2.方法拋出多個例外
    (由於兩個差異不大,所以我直接做當發生多個例外的狀況)
    程式範例試做:
public class Alex1001_2 {
    int[] score = {85, 95, 75 };
    float average =0;
    public void myScore() throws IllegalArgumentException,IndexOfBoxException{
        int sum=0;
        for( int i=0; i< score.length; i++){
            if(score[i] < 0 || score[i] >100)
                throw new IllegalArgumentException("數值範圍不符");
            sum += score[i];
        }
        average = (float)sum/score.length;
    }
    public static void main(String args[]){
        Alex1001_2 t = new Alex1001_2();
        try{
            t.myScore();
            System.out.println("平均方數:"+t.average);
        }catch (Exception e){
            System.out.println("成績算發生錯誤:" + e.getMessage() );
        }
    }
}

自訂例外

  • Exception是一個類別,所以當你需要一個例外類別來處理特殊狀況,可以透過產生自訂的例外類別。
    而Exception類別並沒有自己的方法,他的方法都要從Throwable類別中繼承。
    以下為Throwable類別的方法:
回傳值類型 方法 功用
throwable fillnStackTrace() 傳回包含完整堆疊追蹤的Throwable的物件。
throwable getCause() 傳回造成例外原因的Throwavle物件。
String getLocalizedMessage() 傳回例外的訊息說明,通常此方法傳回的訊息和getMessage()相同。
String getMessage() 傳回例外的訊息。
StackTracelement[] getStackTrace() 傳回包含堆疊追蹤的陣列。
throwable initCause(Throwable cause) 將cause當作是例外發生的原因。
void printStackTrace() 顯示堆疊追蹤。
void printStackTrace(PrintStream ps) 將堆疊追蹤顯示在PrintStream類別的串流物件當中。
void printStackTrace(PrintWriter pw) 將堆疊追蹤顯示在PrintWriter類別的串流物件之中。
void setStackTrace(StackTraceElement[] ste) 設定堆疊追蹤元素由getStackTrace()方法傳回、由printStackTrace()方法顯示。
String toString() 傳回簡短的例外描述字眼。

上一篇
Javat程式-例外處理
下一篇
Java程式-數學運算
系列文
自學Java物件導向程式語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言