天天看點

get異常處理的必備技能 | 帶你學《Java面向對象程式設計》之八十

上一篇:對異常說“我不管” | 帶你學《Java面向對象程式設計》之七十九

【本節目标】

通過閱讀本節内容,你将進一步掌握異常處理的相關方法,并能夠做到準确地捕獲異常與抛出異常。同時,也能了解到RuntimeException的相關資訊。

異常處理的标準格式

現在已經學習完成了大部分的異常處理格式:try、catch、finally、throw、throws,那麼這些關鍵字在實際的開發之中往往會一起進行使用。下面通過一個具體的程式進行分析。

現在要求定義一個實作除法計算的方法,在這個方法之中開發要求如下:

  • 在進行數學計算開始與結束的時候進行資訊提示;
  • 如果在進行計算的過程之中産生了異常,則要交給調用處進行處理。
class MyMath {
      //異常交給調用處處理則一定要在方法上使用throws
    public static int div(int x , int y) throws Exception {
        int temp = 0 ;
        System.out.println("***【START】除法計算開始。"); 
        try {
            temp = x / y ;
        }catch (Exception e){
            throw e ;    //向上抛異常對象
        }finally{
             System.out.println("***【END】除法計算結束。");   
        }
        return temp ;
    }
}
public class JavaDemo {
    public static void main(String args[]) {
        try {
            System.out.println(MyMath.div(10,0)) ;
        }catch (Exception e) {
            e.printStackTrace() ;
        }
    }
}           
get異常處理的必備技能 | 帶你學《Java面向對象程式設計》之八十

圖一 異常處理結果

對于此類操作實際上可以簡化省略catch、throw的操作

class MyMath {
      //異常交給調用處處理則一定要在方法上使用throws
    public static int div(int x , int y) throws Exception {
        int temp = 0 ;
        System.out.println("***【START】網絡資源連接配接。"); 
        try {
            temp = x / y ;
        }finally{
             System.out.println("***【END】網絡連接配接關閉。");   
        }
        return temp ;
    }
}
public class JavaDemo {
    public static void main(String args[]) {
        try {
            System.out.println(MyMath.div(10,0)) ;
        }catch (Exception e) {
            e.printStackTrace() ;
        }
    }
}           
get異常處理的必備技能 | 帶你學《Java面向對象程式設計》之八十

圖二 異常處理格式

在以後實際開發過程之中,這種異常的處理格式是最為重要的,尤其是當與一些資源進行通路操作的時候尤其重要。

RuntimeException

通過之前的分析可以發現隻要方法後面帶有throws往往都是告訴使用者本方法可能産生的異常是什麼,是以這個時候來觀察一段代碼。

public class JavaDemo {
    public static void main(String args[]) {
        int num = Integer.parseInt("123") ;
        System.out.println(num) ;    //123
    }
}           

打開Integer類中的parseInt()方法的定義來觀察:

public static int parseInt(String s) throws NumberFormatException

這個方法上明确的抛出了一個異常,但是在處理的時候并沒有強制性要求處理。觀察一下NumberFormatException類的繼承結構,同時也觀察一下數學異常類的繼承結構:

ArithmeticException: NumberFormatException:

java.lang.Object

java.lang.Throwable

java.lang.Exception

java.lang.RuntimeException

java.lang.ArithmeticException

java.lang.IllegalArgumentException

java.lang.NumberFormatException

如果現在所有的程式執行上隻要使用了throws定義的方法都必須要求開發者進行手工處理,那麼這個代碼的編寫就過于麻煩了。是以在設計的過程之中考慮到代碼編寫的友善,是以提供有一個靈活的可選的異常處理父類“RuntimeException”,這個異常類的子類可以不需要強制性處理。

面試題:請解釋RuntimeException與Exception的差別?請列舉出幾個常見的RuntimeException。

  • RuntimeException是Excception的子類;
  • RuntimeException标注的異常可以不需要進行強制性處理,而Exception異常必須強制性處理;
  • 常見的RuntimeException異常類型: NumberFormatException、 ClassCastException、 NullPointerException;

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:教你如何自定義“異常” | 帶你學《Java面向對象程式設計》之八十一 更多Java面向對象程式設計文章檢視此處