public class Exception extends Throwable
Exception 類及其子類是 Throwable 的一種形式,它指出了合理的應用程序想要捕獲的條件。
public class RuntimeException extends Exception
RuntimeException 是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。
可能在執行方法期間拋出但未被捕獲的 RuntimeException 的任何子類都無需在 throws 子句中進行聲明。
Java中凡是繼承自Exception但不是繼承自RuntimeException的類都是非運行時異常 spa
a) RuntimeException類直接繼承自Exception類,稱爲運行時異常。Java中全部的運行時異常都直接或間接的繼承自RuntimeException. code
Java中全部的異常類都直接或間接的繼承自Exception。 blog
對應非運行時異常,必須對其進行處理。處理方式有兩種: 繼承
對於運行時異常,能夠不對其進行處理,也能夠對其進行處理。通常狀況下都不對其進行處理。 編譯器
try { FileInputStream fs = new FileInputStream("D:/temp/a.txt"); } catch (FileNotFoundException e) { System.out.println("catch..."); e.printStackTrace(); } finally{ System.out.println("finally..."); }
public class ExceptionTest { public static void execute() throws Exception { System.out.println("execute..."); throw new Exception(); } public static void main(String[] args) throws Exception { execute(); } }
public class ExceptionTest { public static void execute() throws Exception { System.out.println("execute..."); throw new Exception(); } public static void main(String[] args) { try { execute(); } catch (Exception e1) { e1.printStackTrace(); } } }
自定義異常一般是定義一個繼承自Exception類的子類。通常狀況下咱們都會直接繼承自Exception類,而不會繼承某個運行時的異常類。 虛擬機
public class MyException extends Exception{ public MyException(){ super(); } public MyException(String msg){ super(msg); } }
public class ExceptionTest { public static void execute(String a) throws MyException { System.out.println("execute..."); if("true".equals(a)){ throw new MyException("參數不能爲 true"); } } }
public static void main(String[] args) throws MyException { execute("true"); }
當使用多個catch語句塊來捕獲異常時,須要將父類的catch語句塊放到子類型的catch塊以後,這樣才能保證後續的catch可能被執行,不然子類型的catch將永遠沒法到達,Java編譯器會報編譯錯誤。 it
若是try語句塊中存在return語句,那麼首先會執行finally語句塊中的代碼,而後才返回。 io
若是try語句塊中存在System.exit(0)語句,那麼久不會執行finally語句塊的代碼了,由於System.exit(0)會終止當前運行的JVM。程序在JVM終止前結束執行。 編譯