JAVA基礎:五、異常

異常
1、複習
2、新內容

  異常
 一、什麼是異常
    1、異常的概念:程序中出現的錯誤
    2、生活中的異常:什麼是異常,正常的反義詞。
  趙日天開車去上班,正常情況從家到公司大概30分鐘。
  異常情況下:堵車、車禍、車子拋錨、沒油、碰瓷(很有可能發生,要考慮應對的情況)
  異常是不可避免的,所以我們預先有應對的方法。
  異常發生的時候我們能做什麼?不可能一動不動不處理,崩潰在那裏?不管怎麼樣,生活要繼續。
  堵車---繞路、下車跑去機場。
  車禍---報保險、報警
  車子拋錨---24小時救援、拖車
  沒油---搞個瓶子加油去
  碰瓷---報警
  try{
       早上起來開車去公司
  }catch(堵車異常 d){
        d.堵車的具體信息    //輸出堵車具體信息,看要怎麼處理
        System.out.println("繞路吧");
  }catch(車禍 h){
        h.車禍的具體信息    //輸出堵車具體信息,看要怎麼處理
        System.out.println("報110、120急救");
  }
 二、異常的分類:異常用try...catch...捕獲處理
    1、系統錯誤。(海嘯、地震、塘沽大爆炸,O了,啥也不想了,命都沒了,你還去啥公司)
  (Error) 虛擬機內存溢出,系統崩潰。不能捕獲處理。(無法用try...catch...捕獲處理)
    2、語法錯誤:(早上起來你瘋了、你炸了,還去啥公司,人都不正常,程序都不能運行)
  編譯時錯誤(不是異常):語法錯誤,不能通過編譯
  (MyEclipse直接以紅線的形式提示)(無法用try...catch...捕獲處理)
    3、程序運行異常:語法沒有錯誤,而運行時違反了java程序的規範而導致程序終止

    ×××異常,通常意義上指的都是 程序運行異常×××
     程序運行異常又可分爲:  
  *系統異常:違反了Java已經定義好的一些規範,如輸入不匹配異常,除數爲0,數組越界等
  
  java.util.InputMismatchException  :輸入不匹配異常
  Exception in thread "main" java.lang.ArithmeticException: / by zero 算術異常
  
  *自定義異常:違反了程序員自己定義的一些規範,如年齡只能在0-100,輸入項只能是1-3等。
 三、異常出現的狀態(程序運行異常):
  程序終止(沒運行完就崩潰了),並在控制檯顯示錯誤的詳細描述信息(車禍,)
  System.out.println(1);
  int a = 1/0;
  System.out.println(2);
 四、處理異常的目的:當出現異常時能繼續運行程序而不終止,並且控制檯顯示的方式換成自定義的形式
 五、異常處理的一般模式:try  catch Exception finally
  try :用來監視有可能出現異常的代碼塊。當出現異常時將異常拋出到catch(可能出現異常的代碼)
  catch:當出現異常時,負責處理異常的代碼塊,try中一旦有異常會自動跳轉到這裏(異常處理)
  finally:無論是否有異常,都會執行的代碼(清理資源的代碼)
  Exception類:異常也是對象,都屬於Exception類,拋出到catch塊中的就是個異常對象。
   使用異常對象來獲得異常信息。
 6.多重try catch語句
  a.運行時異常的常見種類:
  數組下標越界 :java.lang.ArrayIndexOutOfBoundsException
  除數爲0  :java.lang.ArithmeticException
  空指針異常:java.lang.NullPointExcpeiton
  輸入格式錯誤:java.util.InputMismatchException
  連不上網絡:
  打不開文件:
  ......
  b.異常的繼承體系:
  見圖片文件。
  系統異常又可分爲運行時異常與資源訪問異常(文件操作,數據庫讀取等)
  c.多重catch語句:
  當一段代碼中可能出現多種類型異常時,可以接上多個catch塊分別處理不同類型的異常。系統會自動選擇最適合的catch塊來處理異常。
  可以處理多種異常,但每次只會處理一個。
  一般在最後加上處理Exception類型的異常表示其他未知錯誤。
  d.try  catch 可以嵌套使用
 總結:1、程序員對Error無能爲力,只能處理Exception。
          2、對異常的處理關係的程序的健壯性。
          3、使用try...catch...finally來處理可能出現異常的代碼。


 六、自定義異常的處理
  a.自定義異常類,繼承與Exception,在構造函數中使用super(String)向父類傳遞一個表示異常信息的字符串。
  b.拋出自定義異常對象的方式:throw new XXXException().
  c.處理自定義異常的方式:catch  等同與處理系統異常。
 
 1、throw關鍵字:年齡、身高負數等Java虛擬機判斷不了的異常,自己定義一個異常對象,然後用throw拋出
 七、throw和throws關鍵字
  
   2、throws關鍵字
  a.作用:在Java中允許在一個函數內,如果有異常函數內部不處理而使用throws關鍵字表示該函數會拋出的異常類型。這些異常將交給調用該函數的其他函數負責處理
  b.其他函數調用時則必須處理 或者可以使用throws繼續向上層調用者拋出。
  c.所有繼承於RunTimeException的異常不可用throws拋出,在函數內部必須處理。
   
  

     異常又分爲:
  uncheck Exception: RuntimeException
  check Exception:      極有可能出錯必須檢查捕捉  
  選擇:1、可以在方法中用try...catch...捕捉處理
           2、在方法後用throws聲明拋出異常,由調用該方法的其他方法負責處理


發佈了44 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章