重看異常機制的時候覺得抓到了點機理上的精髓,是以來說一下,對初學者應該會有些幫助
JAVA中的異常機制
- 從機制上由【産生異常】【抛出異常】【捕捉異常】【異常處理】組成
- 從形式上又分為四種:
- 運作時出現BUG系統産生異常。最經典的抛出異常方式
- 包括【産生異常】【抛出異常】
- throw。形式是“先自己new異常對象 ,然後throw 異常對象”,在代碼的任何地方都可以手動産生抛出
- try...catch...finally。最經典的捕捉異常方式,并進行處理
- 包括【捕捉異常】【異常處理】
- throws。它的功能是向上層轉發異常,它加在某個方法後,當這個方法被調用時,方法中可能産生異常,并把這個異常從方法中轉發出來到調用這個方法的方法中
- 包括【捕捉異常】【抛出異常】
- 運作時出現BUG系統産生異常。最經典的抛出異常方式
- 可以發現能【異常處理】的隻有一個,能【産生異常】的有兩個,能【捕捉異常】 的有兩個,能【抛出異常】 卻有三個
- 是以經常的應用形式是:
- 最開始用《try...catch...finally》或《throws》這兩種能【捕捉異常】的東西包裹住【産生異常】【抛出異常】的《運作時出現BUG系統産生異常》或《throw》
- 然後其中
- 包裹了《運作時出現BUG系統産生異常》或《throw》的《try...catch...finally》因為是帶【異常處理】的【捕捉異常】,是以異常就能被處理了,異常處理到此結束
- 包裹了《運作時出現BUG系統産生異常》或《throw》的《throws》因為是不帶【異常處理】的【捕捉異常】,但是它帶【抛出異常】,是以異常不能被最終處理,異常會被再次抛出。是以異常處理到此沒有結束,它成為了抛出源,還需要被《try...catch...finally》或《throws》再次包裹
- 于是類似上上層的第一步,不過是(循環開始)用《try...catch...finally》或《throws》這兩種能【捕捉異常】的東西再次包裹住【抛出異常】的《throws》
- 然後其中還是
- 用《try...catch...finally》包裹住的《throws》,異常能被處理,異常處理到此結束
- 用《throws》包裹住的《throws》,異常不能被最終處理,異常還會被再次抛出,是以異常處理到此沒有結束,它成為了抛出源,還需要被《try...catch...finally》或《throws》再次包裹
- 于是回到上上層的第一步,完全一樣,開始循環