異常
1.JAVA異常體系
(1)Throwable類(表示可拋)是所有異常和錯誤的超類,兩個直接子類為Error和Exception,分別表示錯誤和異常;其中異常類Exception又分為運行時異常和非運行時異常,這兩個異常有很大區別,運行時異常也叫非受檢異常;非運行時異常也叫受檢異常
(2)Error是程序無法處理的錯誤,它是由J八VM產生和拋出的,比如OutofMemoryError、ThreadDeath等,這些異常發生時,一般會選擇線程終止
(3)Exception是程序本身可以處理的異常,對于這類異常,程序應當盡可能去處理
(4)運行時異常都是RuntimeException類以及其子類異常,比如NullPointerException、ArraylndexOutofBoundsException等,這些異常也是不接受檢查異常,程序可以選擇處理,也可以選擇不處理,這類異常一般由程序邏輯錯誤引起,程序應該從邏輯角度盡可能避免這類異常的發生
(5)非運行時異常都是除RuntimeException類以及其子類異常之外的類,這些類都屬于Exception關,都是要接受檢查的異常,比如IOException、sQLException,從程序語法角度是這類異常是必須要進行處理的異常,如果不處理,程序就不能編譯通過
?2.異常處理方式以及差別
(1)try catch處理方式,如果try代碼塊中的代碼運行出現錯誤,那么catch代碼塊中的代碼執行,但不影響后邊代碼運行
(2)throws處理方式向外拋出異常,讓之后一個接收到該異常的方法去處理
3.try-catch代碼塊
try{可能出現異常的代碼
}catch(異常類型){當產生對應異常類型時,會執行catch中代碼
}finally{無論如何都會執行的代碼
}
4.try-catch的使用
(1)try、catch、finally三個語句均不能單獨使用,三者可以組成,try...catch、try..finally、try ...catch....finally三種結構,其中catch可以有多個, finally語句最多一個
(2)try,catch、finally三個代碼塊中變量的作用域為代碼內部,分別獨立而不能相互訪問,如果要在三個塊中使用,則需要把變量定義到這些塊之外
(3)多個catch塊,最多只會匹配其中一個異常類且只會執行該catch塊代碼,而不會再執行其他catch塊代碼,且匹配catch語句的順序是從上到下,也可能所有的catch塊都不執行
(4)先catch子類異常再catch父類異常
(5)finally語句是無論try中有沒有發生異常,都會執行的語句塊,一般finally是程序提供的一個統一的出口,保證程序轉到其他部分繼續執行,finally通常做一些清除工作,如關閉文件,關閉資源等