丟擲異常和捕獲異常的區別
阿新 • • 發佈:2018-12-13
丟擲異常:如果程式中出現了異常,沒有辦法將具體的異常打印出來,不做任何處理
捕獲異常:如果程式出現了異常,就能夠詳細的列印是什麼原因導致了異常並且能夠做出相應的處理,能夠顯示詳細的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<異常類>]
其中:異常類可以宣告多個,用逗號分割。