java異常——RuntimeException和User Define Exception


1.RuntimeException

今天摩根IT電面的時候被問到Exception和RuntimeException的區別,當時答不出來,大囧,晚上來學習一下。

首先看一段代碼,主要內容就是將字符串類型的數字轉化為整型的數字,然后讓兩個數字相乘,代碼如下:

View Code
public class RuntimeException {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str="123";
        int temp=Integer.parseInt(str);
        System.out.println(temp*temp);
    }
}

查看parseInt方法的源代碼如下:

View Code
   public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s,10);
    }

我們發現這個方法中拋出了NumberFormatException異常,但是在上面的代碼中我們沒有找到try...catch來處理,這是為什么呢。按照我們異常處理的知識,如果一個方法通過throws拋出了異常,那么可以在拋出異常的方法中不使用try...catch,但是在調用這個方法的地方必須有try...catch來處理。

下面來觀察NumberFormatException類的繼承關系:

從上圖我們可以發現NumberFormatException是RuntimeException的子類,那么這就需要我們清楚Exception和RuntimeException的概念:

  1. Exception:在程序中必須使用try...catch進行處理。
  2. RuntimeException:可以不使用try...catch進行處理,但是如果有異常產生,則異常將由JVM進行處理。

對於RuntimeException的子類最好也使用異常處理機制。雖然RuntimeException的異常可以不使用try...catch進行處理,但是如果一旦發生異常,則肯定會導致程序中斷執行,所以,為了保證程序再出錯后依然可以執行,在開發代碼時最好使用try...catch的異常處理機制進行處理。

 

2.User Defined Exception

下面給出一個自定義異常的實例:

View Code
class MyException extends Exception{
    public MyException(String msg){
        super(msg);
    }
}

public class DefaultException {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try{
            throw new MyException("自定義異常");
        }catch(Exception e){
            System.out.println(e);//edu.sjtu.ist.comutil.MyException: 自定義異常
            //System.err.println(e);
//            e.printStackTrace();
//            StackTraceElement[] sts = e.getStackTrace();
//            for (StackTraceElement st : sts){
//                System.err.println(st);
//            }

        //    System.err.println(e.getStackTrace());
        }

    }

}

輸出結果為:

MyException: 自定義異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM