1. 程式人生 > >java之異常(基本概念)

java之異常(基本概念)

什麼是異常

異常是指程式可以編譯,由於程式內部或外部的原因造成的問題。並不等同於錯誤。錯誤是指語法上的錯誤等導致程式碼不能編譯。

java中所有的異常類都是從Throwable繼承來的。Error類是jvm內部出現資源耗盡等問題時報的異常,這類異常往往無法解決。我們這裡所講述的異常都是Exception類中的。
異常可以分為執行時異常(RuntimeException)和已檢查異常(IOException等)。

執行時異常往往編譯沒有問題,在執行時出現錯誤的異常。例如:陣列越界等問題。
非檢查時異常
執行結果為:

已檢查異常是程式碼本身沒有問題,但有可能會出現一些問題,在編寫程式碼時需要主動丟擲異常或對異常進行捕獲。例如:檔案找不到異常。
型別異常詳細分類參照:

菜鳥教程之異常處理

怎麼處理異常

一般對異常進行簡單的處理,有兩種處理方式,捕獲和丟擲。
1. 捕獲異常:使得異常不被拋到方法之外,也不需要throws規範

try{
//可能發生異常的程式碼
}
catch(異常的型別宣告){
//發生異常時執行的程式碼
}
finally{
//無論是否發生異常都會執行的程式碼
}

package com.ar.dgh.tese4;
import java.io.UnsupportedEncodingException;

public class Test{

    public static void example()
    {
        String str = null
; byte[] bytes={122,121,120}; try { str = new String(bytes,"utf-8"); } catch(UnsupportedEncodingException uee) { } System.out.println(str); } public static void main(String[] args){ example(); } }

執行結果為:

zyx

finally可以省略,catch可以有多個,捕獲多個不同的異常。也可以只有try程式碼塊。
2. 丟擲

  • throw
    丟擲的是異常的物件,存在在方法體內,執行一定會丟擲異常。

  • throws
    丟擲的是異常的型別,宣告在方法體外,可能會發生異常。

import java.io.UnsupportedEncodingException;

public class Test{

    public static void example() throws UnsupportedEncodingException
    {
        String str = null;
        byte[] bytes={122,121,120};
            str = new String(bytes,"utf-8");
        System.out.println(str);
    }
    public static void main(String[] args){
        example();//此時的方法是不能夠被呼叫的,顯示異常

    }

無論是丟擲異常還是捕獲異常都是消極的處理方式,而要解決異常還需要程式設計師來解決。

自定義異常

在遇到無法用異常類描述的錯誤時,可以自己定義異常。
定義一個派生於Exception的類,或者其子類的類
定義的類包含兩個構造器:預設的構造器,帶有詳細描述資訊的構造器