java異常分析(一)

  
   

    程序的運行過程當中會遇到一些問題,而這些問題不是僅僅依靠代碼就能避免的,比如客戶輸入數據的格式,讀取文件是否存在,網絡是否保持通暢等問題。

    異常:將程序執行過程中發生的不正常情況叫異常。(程序設計過程中的語法錯誤和邏輯錯誤不是異常)。

    舉例分析:“在使用File類的方法時,如創建文件時可能會出現一種情況:要創建的文件指向了U盤中一個路徑,當程序運行時,有人將U盤拔掉了!這時我們的程序執行就會出錯,即拋出異常。異常情況是指程序在運行時,可能由與外部系統的條件變更(與我們一廂情願所設想的不一設)而導致程序可能會出錯的情況,如我們的代碼要連結數據庫,但數據庫未啓動,要創建目錄,操作系統上卻己存在同名的真實文件;即所謂異常是指可能(僅是可能)由與外部系統的,導致程序可能出錯(中斷運行)的原因。”

    java程序在執行過程中可能發生的異常事件可以分兩類:
   (1)Error:java虛擬機無法解決的嚴重問題。如JVM系統內部錯誤,資源耗盡(棧溢出,堆溢出)等問題。程序中不處理。
   (2)Exception:其他因編程錯誤或偶然的外在因素導致的一般性問題,可以由程序員使用針對性的代碼進行處理。如:空指針訪問,讀取的文件不存在,網絡不暢通等問題。要求在程序設計時,考慮對這些異常的處理。

    Exception也可以分爲兩類:

 編譯時異常(執行javac.exe命令時出現異常)
 運行時異常(執行java.exe命令時出現異常)
 
     注意:當程序執行時,如果出現異常,那麼異常後面的程序不再執行。



     異常處理方式(抓拋模型):

 1.“拋”:當執行代碼時,一旦出現異常,就會在代碼處生成一個異常類的對象,並將此對象拋出;
  拋出異常對象後,程序終止執行;
  此異常類對象拋給方法調用者-最終拋給Java虛擬機(自動拋出  手動拋出);
  2.“抓”:抓住上一步拋出來的異常類的對象,如何抓?即爲異常處理方式,java提供了兩種異常的處理方法。
 
  異常處理方式一:
  try{
     //可能出現異常的代碼
  }catch(Exception1 e1){//此處即爲“抓”
     //處理方法1
  }catch(Exception2 e2){
     //處理方法2
  }finally{
     //一定要執行的代碼
  }
  注意:
  (1)try內聲明的變量是局部變量,只能在try語句中使用
  (2)finally是可選的
  (3)catch語句內部是對異常對象的處理(兩種默認結構:getMessage()和printStackTrace());
  (4)可以有多個catch語句,try語句中拋出的異常類對象由上至下的匹配catch語句中異常類的類型,
  一旦匹配,就執行catch語句中代碼,執行完後,跳出後面所有catch語句。
  (5)處理完異常後,其後的代碼可以繼續執行。
  (6)當try語句中拋出多個異常時,要有多個catch語句分別抓取異常對象,如果異常類型爲並列關係,catch語句順序可以不考慮,如果爲繼承關係,將子類放在父類上面,否則報錯。
  (7)finally語句中存放的是一定會被執行的代碼,不管try,catch中是否仍有異常未被處理,以及是否有return語句。
  (8)try-catch語句是可以嵌套的。
 
  ps:對運行時異常來說,可以不進行顯式示處理。
     對編譯時異常來說,必須要顯式示處理。

異常處理方式二:
  在方法的聲名處,顯示的拋出該異常對象的類型。
  格式: (例子)public void method2() throws FileNotFoundException,IOException{};
  當此方法內部出現異常的時候,會拋出異常類的對象,給方法的調用者。
  異常類的對象可以逐層向上拋出,直至拋給java虛擬機,過程當中可以用try-catch-finally語句解決。
 


 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章