天天看點

了解Java異常處理機制的機理

重看異常機制的時候覺得抓到了點機理上的精髓,是以來說一下,對初學者應該會有些幫助

JAVA中的異常機制

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