1. 程式人生 > >丟擲異常和捕獲異常的區別

丟擲異常和捕獲異常的區別

丟擲異常:如果程式中出現了異常,沒有辦法將具體的異常打印出來,不做任何處理

捕獲異常:如果程式出現了異常,就能夠詳細的列印是什麼原因導致了異常並且能夠做出相應的處理,能夠顯示詳細的Log

如果程式碼是丟擲異常的方式,在執行時出現異常,並且列印的Log不明顯,可以改用try{}catch方式來捕獲異常,打印出詳細的資訊

throws語句   

throws總是出現在一個函式頭中,用來標明該成員函式可能丟擲的各種異常。對大多數Exception子類來說,Java 編譯器會強迫你宣告在一個成員函式中丟擲的異常的型別。如果異常的型別是Error或 RuntimeException, 或它們的子類,這個規則不起作用, 因為這在程式的正常部分中是不期待出現的。 如果你想明確地丟擲一個RuntimeException,你必須用throws語句來宣告它的型別。  

throw語句   

throw總是出現在函式體中,用來丟擲一個異常。程式會在throw語句後立即終止,它後面的語句執行不到,然後在包含它的所有try塊中(可能在上層呼叫函式中)從裡向外尋找含有與其匹配的catch子句的try塊。

public class MyException extends Exception {  
  
    String msg;  
  
    MyException(int age) {  
        msg = "age can not be positive!";  
    }  
  
    public String toString() {  
        return msg;  
    }  
      
}  
package com.hb.exception;  
  
public class Age {  
    public void intage(int n) throws MyException {//  
        if (n < 0 || n > 120) {  
            MyException e = new MyException(n);  
            throw e; // 是一個轉向語句,丟擲物件例項,停止執行後面的程式碼  
        }  
        if (n >= 0) {  
            System.out.print("合理的年齡!");  
        }  
    }  
  
    public static void main(String args[]) {  
        int a = -5;  
        try { // try catch 必需有  
            Age age = new Age();  
            age.intage(a);// 觸發異常  
            System.out.print("丟擲異常後的程式碼");// 這段程式碼是不會被執行的,程式已經被轉向  
        } catch (MyException ex) {  
            System.out.print(ex.toString());  
        } finally {// 無論拋不拋異常,無論catch語句的異常型別是否與所丟擲的例外的型別一致,finally所指定的程式碼都要被執行,它提供了統一的出口。  
            System.out.print("進入finally! ");  
        }  
    }  
}  

列印結果:

age can not be positive!進入finally! 

throw 是語句丟擲一個異常;throws 是方法丟擲一個異常;

throw語法:throw <異常物件>

在方法宣告中,新增throws子句表示該方法將丟擲異常。

throws語法:[<修飾符>]<返回值型別><方法名>([<引數列表>])[throws<異常類>]

其中:異常類可以宣告多個,用逗號分割。