Java異常超詳細總結

來源:互聯網
上載者:User

標籤:color   體系圖   動作   finalize   異常處理   不可   記憶體回收行程   strong   static   

什麼是異常:  

  異常就是Java程式在運行過程中出現的錯誤。

騷話:

  世界上最真情的相依就是你在try我在catch,無論你發什麼脾氣,我都靜靜接受,默默處理(這個可以不記)

異常繼承體系圖:

  

異常處理的方式:

  try{

     用來檢測異常的

  } catch(){

     用來捕獲異常的 

  }finally{

    一定會執行的語句。

  }

throws:聲明方法可能要拋出的異常。
throw:手動拋出異常。

異常處理方式(Java提供特有的語句進行處理異常)

 1 public class Demo1 { 2     public int Demo1(int a,int b)throws Exception{ 3         //功能上通過throws 關鍵字聲明該功能可能出現問題。 4         //調用者必須在主函數拋出此異常(throws Exception)或者捕獲該異常(try catch) 5         return a/b; 6     } 7     public static void main(String[] args) { 8         Demo1 de = new Demo1(); 9         try {10             int demo1 = de.Demo1(1, 0);11             System.out.println(demo1);12         } catch (Exception e) {//Exception e = new ArithmeticException();13             System.out.println("除數不能為零");14             System.out.println(e.getMessage()); //擷取異常資訊15             System.out.println(e.toString());   //調用toString方法,列印異常類型和異常資訊16             e.printStackTrace();                //jvm預設就用這種方式處理異常17         }finally{    18             System.out.println("十年飲冰,難涼熱血");//finally中的代碼一定會執行19         }20     }21 }

自訂異常:

  項目中出現特有的異常,這些異常沒有被Java描述並封裝進對象。

  對這些特有的異常問題可以按照Java對問題封裝的思想。將特有的問題。進行自訂封裝

     當函數內部出現throw拋出異常對象,那麼就必須對應的處理動作。(1.try catch  2.函數上聲明讓調用者處理)。 

異常分為兩種異常:

  編譯時間異常:在編譯某個程式的時候,有可能有這樣那樣的事情發生,比如檔案找不到,這樣的異常就必須在編譯的時候處理,如果不處理就編譯不過。

  運行時異常:就是程式員所犯得錯誤,需要回來修改代碼

面試題:

  1.throws與throw的區別:

    throws:                              throw:

    * 用在方法聲明後面,跟的是異常類名                  * 用在方法體內,跟的是異常對象名
    * 可以跟多個異常類名,用逗號隔開                   * 只能拋出一個異常對象名
    * 表示拋出異常,由該方法的調用者來處理                * 表示拋出異常,由方法體內的語句處理

  2.final,finally和finalize的區別:

    *final:可以修飾類-被其修飾的類不能被繼承     修飾方法-不能被重寫        修飾變數-只能被賦值一次

    *finally:是try語句中的一個語句體,不能單獨使用,用來釋放資源的

    * finalize:finalize()是一個方法,當記憶體回收期確定不存在的對象的更多引用時,由對象的記憶體回收行程調用此方法

  3.如果catch裡面有return語句,請問finally的代碼還會執行嗎?如果會,請問是在return前還是return後。   

 1 public class Demo1_Demo1 { 2     public static void main(String[] args) { 3         Demo dm = new Demo(); 4         int dr = dm.getDemo(); 5         System.out.println(dr); 6     } 7 } 8 class Demo{ 9     public  int getDemo(){10         int x =10;11         try {12             System.out.println(1/0);13             x=20;14             return x;15         } catch (Exception e) {16             x=30;17             return x;    //先建立一個隧道,執行完Filally釋放完資源,隧道不會改變,所以值還是3018         }finally{    //千萬不要在finally裡面寫返回語句,因為finally的作用是用來釋放資源的,19             x=40;    //肯定會被執行,如果在裡面寫返回語句,那麼try和catch的結果都會改變,所以這麼寫就是~        20         }21     }22 }

 

異常注意事項:

  * a:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)

  * b:如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常

  * c:如果被重寫的方法沒有異常拋出,那麼子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那麼子類只能try,不能throws

 

Java異常超詳細總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.