java中的異常及異常處理

  1. java中全部異常類都繼承Throwable類,Throwable主要有兩個子類,爲Error 和 Exception。java

  2. Error 主要爲虛擬機錯誤(VirtualMachineError)和線程死鎖(ThreadDeath)。若是出現了Error錯誤,意味着程序崩潰了。數組

  3. Exception 通常指編碼、環境、用戶操做輸入出現了問題。Exception主要分兩類,RuntimeException(非檢查異常)和檢查異常。引發RuntimeException的緣由有不少,好比引用了一個空對象的屬性或方法(NullPointerException),也有多是數組訪問越界(ArrayIndexOutOfBoundsException)或者是錯誤的類型轉換(ClassCastException),還有算術方面的錯誤(ArithmeticException)。此類異常由java虛擬機拋出並處理,出現運行時異常通常是代碼自己有問題,應該從邏輯方面來改進代碼。引發檢查異常的緣由也不少:好比說文件異常(IOException)、SQL異常(SQLException). 此類異常須要手動添加處理代碼,java虛擬機不處理。編碼

  4. 異常處理:線程

    1. try...catch:若是try中的語句出現異常,程序的控制權將被移交給catch塊中的一場處理程序。咱們能夠在一個try後面輸入多個catch塊,來主要不一樣異常。catch塊的書寫順序要按從小到大的順序來寫。如:ArithmeticException-->Exception.code

    2. try...catch...finally:finally中輸入最終要執行的代碼。無論有沒有發生異常都會執行finally裏的語句。
      對象

    5.java中的異常拋出以及自定義異常繼承

        a.異常拋出
資源

            i.throw : 講產生的異常拋出(動做)
虛擬機

            ii.throws :寫在方法名或者方法的參數表以後,在方法體以前。
it

              

  public void 方法名(參數列表) throws 異常列表{
                    throw new Exception();                                
                }

        b.自定義異常

            

class 自定義異常類 extends 異常類型{};

           

 public class DrunkException extends Exception{
                public DrunkException(){}
                public DrunkException(String message){
                    super(message);
                }
            }

    6.java中的異常鏈

       

public class ChainException(){
            public static void main(String args[]){
                ChainException ce = new ChainException();
                try{
                    ce.test2();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        public void test1() throws DrunkException{
            throw new DrunkException("喝酒別開車");
        }
        public void test2(){
            try{
                test1();
            }catch(DrunkException e){
                RuntimeException runExce = new RunctimeException("司機一滴酒,親人兩行淚 ~~");
                runExce.initCause(e);
                //或者
                RuntimeException runExce = new RunctimeException(e);
                
                throw runExce;
            }
         
        }
        
     }

    7.總結:

        a.處理運行時異常,採用邏輯去合理規避同時輔助try-catch語句。

        b.在多重catch以後,加上catch(Exception e)來處理可能會被遺漏的異常。

        c.對於不肯定的代碼,也能夠加上try-catch,處理潛在的異常。

        d.儘可能去處理異常,切忌只是簡單的調用printStackTrace()去打印異常。

        e.具體若是處理異常,要根據不一樣業務需求和異常類型去決定。

        f.儘可能添加finally語句塊,來釋放佔用的資源。

相關文章
相關標籤/搜索