java中,有「異常」和「錯誤」之說,異常咱們能夠本身處理,而錯誤咱們沒法本身處理。java
在平常開發過程當中,異常(Exception)和錯誤(Error)都是咱們不肯意看到的,可是有一些異常,咱們能夠利用它來傳遞信息,這說明異常也不是一無可取,咱們能夠經過本身的處理讓它變得有意義,而錯誤,是java虛擬機運行時發生的錯誤,咱們沒法處理,好比內存溢出。sql
Exception和Error都繼承了一個類,Throwable數據庫
* @author Frank Yellin * @see java.lang.Error * @jls 11.2 Compile-Time Checking of Exceptions * @since JDK1.0 */ public class Exception extends Throwable {
* @author Frank Yellin * @see java.lang.ThreadDeath * @jls 11.2 Compile-Time Checking of Exceptions * @since JDK1.0 */ public class Error extends Throwable {
這篇文章,咱們主要來講Exception數組
Exception是須要咱們處理的異常(全部的Exception及其子類,咱們都須要處理)繼承
Exception的子類分爲兩大類內存
檢查異常 和 不檢查異常開發
不檢查異常,主要爲RuntimeException,也能夠稱爲運行時異常,它的特色是:通常是由程序邏輯錯誤所引發的,好比常見的NullPointException、數組越界異常、除數爲0異常等,這些都是邏輯問題引發的,這種異常咱們不是必須得try catch或者throw,由於咱們根本不知道它何時會發生(邏輯太混亂)編譯器
檢查異常,就是Exception子類中除了RuntimeExcetion以外的其餘子類,好比IOException、SQLException、以及自定義的異常,也稱爲編譯異常,它的特色是:咱們幾乎能夠肯定在什麼地方可能出現這種異常,並且,java編譯器會在編譯時就提示,咱們必須用try catch 或者 throws 來處理,不然編譯不經過。這類異常比較常見的有IOException的子類,FileNotFoundExcetion等等。這種異常不是程序邏輯引發的,而是外部不可控的緣由,好比文件找不到,或者數據庫鏈接失敗,sql語法有問題等等,因此java工程師也是考慮到這種不可控的緣由,咱們必須處理這種異常,也叫防患於未然吧,哈哈虛擬機