1. 程式人生 > >Exception異常處理

Exception異常處理

要養成一個好習慣,在最後一個catch上去捕獲最大的Exception,以防止程式出現一個未捕獲的異常導 致程式退出。還要注意的是,若捕獲的異常中有父子類關係的,一定是子類異常在上,父類異常在下。
例1:

package day03;
/**
 * java異常捕獲機制中的try-catch
 * @author Administrator
 *
 */
public class ExceptionDemo1 {
    public static void main(String[] args) {
        System.out.println("程式開始了");
        try
{ String str = "a"; System.out.println(str.length()); System.out.println(str.charAt(0)); System.out.println(Integer.parseInt(str));//a不能轉換為int }catch(NullPointerException e){ System.out.println("出現了一個空指標!"); }catch(StringIndexOutOfBoundsException e){ System.out.println("下標越界了!"
); /* * 要養成一個好習慣,在最後一個catch上去捕獲最大的Exception,以防止程式出現一個未捕獲的異常導 致程式退出。還要注意的是,若捕獲的異常中有父子 * 類關係的,一定是子類異常在上,父類異常在下。 */ }catch(Exception e){ System.out.println("反正就是出了個錯!"); } System.out.println("程式結束了"); } }

執行結果:

程式開始了
1
a
反正就是出了個錯!
程式結束了

例2:finally示例:

package day03;
/**
 * finally面試題
 * @author Administrator
 *
 */
public class ExceptionDemo3 {
    public static void main(String[] args) {
        System.out.println(test("0")  + "," +test(null) + "," +test(""));
    }

    @SuppressWarnings("finally")
    public static int test(String str){
        try {
            return '0'-str.charAt(0);
        } catch (NullPointerException e) {
            return 1;
        } catch (Exception e){
            return 2;
        } finally{
            return 3;
        }
    }
}

執行結果:

3,3,3

例3:自定義exception示例。
自定義人類年齡不合法:
地非同步寫一個類繼承至Exception,並重寫父類的方法:

package day03;

public class IllegalAgeException extends Exception {

    /**
     *  該異常表示年齡不合法
     */
    private static final long serialVersionUID = 1L;

    public IllegalAgeException() {
        super();
        // TODO Auto-generated constructor stub
    }

    public IllegalAgeException(String message, Throwable cause) {
        super(message, cause);
        // TODO Auto-generated constructor stub
    }

    public IllegalAgeException(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public IllegalAgeException(Throwable cause) {
        super(cause);
        // TODO Auto-generated constructor stub
    }

}

第二步:新建一個Person人使用者,設定年齡:

package day03;
/**
 * 描述一個使用者資訊
 */
public class Person {
    private int age;

    public int getAge() {
        return age;
    }
    /**
     * 通常,方法中使用throw丟擲什麼異常,方法 宣告的時候就要使用throws定義該異常的丟擲。
     * 方法上若使用throws聲明瞭某些異常的丟擲時,那麼外界在呼叫該方法的時候就有一個強制要求,必須處理這些異常。
     * 處理的手段有兩種: 1.try-catch捕獲該異常。2.接著向外丟擲。 
    * 需要注意,當我們使用throw丟擲的不是RuntimeException及其子類異常時,就必須處理這個異常。
     * @param age
     * @throws IllegalAgeException 
     */
    public void setAge(int age) throws IllegalAgeException{
        if(age<0||age>100){throw new IllegalAgeException("不符合人類年齡");}
        this.age = age;
    }
}

第3步:使用自定義的異常測試:

package day03;

public class TestPerson {
    public static void main(String[] args){
        Person p = new Person();
        try {
            p.setAge(1000);
        } catch (IllegalAgeException e) {
            e.printStackTrace();
        }//這裡會丟擲異常。
        System.out.println("他的年齡是:"+p.getAge());
    }
}

執行結果:

day03.IllegalAgeException: 不符合人類年齡
    at day03.Person.setAge(Person.java:30)
    at day03.TestPerson.main(TestPerson.java:7)
他的年齡是:0