新手異常入門

異常數組

  • 程序不正常的執行,報錯。Exception框架

  • 異常有父類:ThrowableThrowable又有子類ErrorExceptionthis

  • 異常的分類:spa

  • Throwable:爲如下錯誤的父類。指針

    • Error(錯誤通常比異常嚴重,通常爲虛擬機出現錯誤)Error類型的錯誤必須拋出解決不能捕獲!日誌

    • Exception對象

      • RuntimeException(運行時異常):編譯經過,不強制處理,在程序運行時出現→ 不受檢查異常。繼承

        • 算術異常、數組下標越界、空指針異常、遞歸

      • 編譯期異常(除了RuntimeException其他都是編譯期異常):必須處理,要麼捕獲,要麼拋出。通常是語法錯誤,在進行編譯時就會報錯→ 受檢查異常.必須及時處理!內存

  • 常見異常

    • Error:內存溢出錯誤(兩個方法之間遞歸調用);

  • 異常的處理

    • 不論是錯誤Error仍是異常Exception都是須要被處理。處理異常有兩種方式:

      • 拋出throws 和捕獲try catch

  • throws:用法:在方法聲明後 即方法參數列表後,左大括號({)前用throws聲明要拋出的異常。throws 異常類名,支持同時拋出多個異常,也就是 throws 異常類名1,[異常類名2]….若是方法有多個異常須要拋出,可使用最大異常父類聲明(Exception)直接拋出Exception;

  • 異常的注意事項以及如何使用異常處理:

    • 有異常的方法怎麼使用:

      • 1)方法內部的異常有try catch處理時:該方法能夠被正常調用。

      • 2)方法聲明上有異常拋出時(throws):調用該方法時必須對該方法處理。

      • 若是方法聲明上有異常拋出,重寫時應該注意

        • 子類重寫有異常方法的時候,子類的方法拋出的異常範圍要比父類範圍小,要麼範圍相等、要麼沒有異常。

        • 做用在於:聲明該方法/編譯或運行時可能拋出的異常種類。只要方法中有異常,不論是運行異常,仍是編譯異常,程序就會在該處中止,並拋出異常。

  • 注意事項:運行時異常,能夠明確的在方法聲明上聲明要拋出的運行時異常,也能夠不聲明。編譯期異常必須處理。要麼拋出(throws)要麼捕獲(try catch)

  • 異常的本質:程序運行拋出的異常,實際上是方法聲明的異常類的對象。

  • throw

    • 在方法體中,能夠明確顯示拋出哪一種異常。能夠準確地控制在什麼地方拋除異常。

    • 語法:throw 異常對象(匿名對象的形式 new 異常類名()),若是throw後面拋出的異常對象是運行時異常,那麼能夠在方法聲明上聲明要拋出的異常,也能夠不聲明。若是throw拋出的是編譯期異常對象,必須強制處理該異常(聲明拋出或者捕獲)

  • throwthrows異同

  • 1)位置不一樣:throw在方法體中,throws是在方法聲明上。

  • 2)做用不一樣:throw後是聲明拋除的異常對象,throws後聲明的是異常類類名。

  • 3)寫法不一樣:throw後只能寫一個異常,throws後能夠寫多個對象名。

  • try catch

    • 異常的另一種處理方式,叫作捕獲異常,在上線的項目中運用普遍,由於顯示拋出異常,程序就會在異常處中止,就會影響程序功能,可是捕獲異常能夠作到即便有異常可是程序還會繼續執行。捕獲異常後通常能夠將異常作成異常日誌,把捕獲的異常統一記錄,後續再進行修改。

    • Try catch能夠捕獲異常讓程序正常執行,可是try{}中的代碼,若是有異常的話,try中報錯後的代碼不執行,如圖:

    • 語法:

       

      • try{

        可能出現異常的代碼

        }catch(要捕獲的異常類名 對象名){

        捕獲以後乾的事情。

        }[catch(要捕獲的異常類名2 對象名2){

          捕獲後乾的事情。

          }]

  • 若是try中拋出的異常不是catct後面要捕獲的異常,就會繼續拋出異常,程序就會停下。

  • 若是try中可能拋出多個異常,能夠寫多個catch 同時捕獲多個異常.可是寫多個catch麻煩,能夠直接捕獲最大的異常Exception。在捕獲Exception異常後,就不能再寫捕獲其子類異常,由於上一個Exception異常已經基本捕獲所有異常

publicstaticvoid main(String[] args) {

try {

//可能出現異常的代碼

System.out.println(1/0);

}catch(ArithmeticException ari){

System.out.println(ari);

System.out.println(ari.getMessage());//打印異常信息/將異常信息寫入日誌

//打印錯誤信息

ari.printStackTrace();

//獲取主要緣由,框架中會常常見CasuseCause在寫項目的時候常常用到,報錯會很是詳細

Throwable Masg = ari.getCause();

System.out.println(Masg);

}//finally{}最終都要執行到的,可寫可不寫

}

  • 自定義異常

  • 1)建立自定義異常類

  • 2)繼承異常類(ExceptionRuntimeExceptionThrowable(是最大的拋出異常類,其下面是Exception)繼承哪一個將擁有那個的特性。例如繼承RuntimeException及其子類就有運行時異常的特色。

  • 3)寫帶(String)參數的構造方法用於將異常信息經過super(messags)傳遞給父類.

    • throw拋出異常程序會直接中止,因此建議用try捕獲異常,可是捕獲異常的時候因爲自定義異常中並無定義相似除數爲0、下標越界等自動拋出異常的方法,因此須要捕獲本身拋出的異常相似於:

      在此set方法被調用的時候,會進行以下的異常捕捉

      publicvoid setAge(intage) {

      if(age >150) {

      try {

      //若是年齡大於150,執行下面的一句話,必定會拋出異常

      thrownew AgeGT150Exception("");

      //捕獲 AgeGt150Exception類的異常

      }catch(AgeGT150Exception ag) {

      //捕獲到後的操做

      ag = new AgeGT150Exception("年級大於150");

      System.out.println(ag);

      }

      }elseif(age < 0) {

      try {

      thrownew AgeLT0Exception("");

      }catch(AgeLT0Exception ag) {

      ag = new AgeLT0Exception("年齡小於0");

      System.out.println(ag);

      }

      }else {

      this.age = age;

      }

      }


      //異常類

      publicclassAgeGT150Exceptionextends RuntimeException{

      public AgeGT150Exception(String massge) {

      super(massge);

      }

      }

相關文章
相關標籤/搜索