用個最簡單的例子來展現爲何須要錯誤處理,以及怎麼用。java
import java.io.FileInputStream; import java.io.FileNotFoundException; public class ThrowsTest { public static void main(String[] args) throws FileNotFoundException { try { throwsTest(); } catch (FileNotFoundException e) { System.out.println("File is not found!"); throw e; } catch (NullPointerException e) { System.out.println(e); } System.out.println("hi"); } public static void throwsTest() throws FileNotFoundException,NullPointerException { new FileInputStream("shiyanlou.file"); throw new NullPointerException("have a try!"); } }
上面的代碼中, throwsTest 拋出了兩個 exception:一個錯誤是由它調用的方法 FileInputStream 拋給它的,另外一個是它本身拋出的。函數
在 main 函數中,經過 try-catch 來捕捉這兩個 exception 並處理。spa
基本原則是:code
1. 拋出的 exception 確定會被 catch。blog
2. catch 到的 exception 能夠當場處理掉,則 exception 被終止。繼承
3. catch 到的 exception 也能夠再 throw 給上一級調用者處理。io
4. 若是一級級往上拋,最終由 JVM 來 catch 的話,就是直接終止程序並打印 stack frame 錯誤。class
咱們使用 exception 的核心目的,就是爲了不第 3 中狀況發生。import
能夠想象,若是由於某個文件沒有找到,咱們的軟件就直接崩潰了,這是件很難接受的事情;從使用角度來說,大不了從新指定路徑。軟件
因此,咱們要努力作好前 3 件事。
前輩總結的 exception 使用心得:
exception 的繼承關係:
發揮問題:是否是能夠本身定義 Throwable ?