#Java學習#(七)異常

其他JAVA學習的內容見:目錄

異常概述

  • 程序面對複雜度情況,例如:程序編寫可能出錯;用戶的輸入出錯;程序所在的操作系統出錯;網絡不通等。
  • 異常:運行期出現的錯誤
try{
	//業務邏輯實現代碼
	...
}catch(Exception e){
	處理錯誤
}
  • Java異常:一種用於處理程序中錯誤的機制。
    • 程序運行出現意外情況時,JVM生成一個Exception對象來通知程序。
  • 錯誤:程序運行過程中發生的異常事件。
    • 例如:除數爲0,數組下標越界。
    • 說明:設計良好的程序應在異常發生時提供處理錯誤的方法,程序不會因爲錯誤發生而阻斷或發生不可預見的錯誤。
  • 流程:
    在這裏插入圖片描述

Java異常分類

在這裏插入圖片描述

  • 分類方法(1)

    • Error:錯誤,由JVM生成並拋出,如虛擬機錯誤,程序不做處理(少見)。
    • Exception:所有異常類的父類(可以處理的錯誤)。
      • RuntimeException
        • 例如:數組訪問越界,訪問空指針
        • 經常出的錯誤,可catch可不catch。
        • 編程導致的錯誤,程序員的錯誤。
      • 非RuntimeException
        • 試圖讀一個磁盤上不存在的文件:IOException
    • 理解:
      • 如果出現RuntimeException,就一定是程序員的問題
      • RuntimeException名字易引起誤會,實際上所有的異常都發生在運行時刻
  • 分類方法(2)

    • 未檢查(unchecked)異常
      • 包括:Error的子類異常 && RuntimeException的子類異常。
      • 特點:不能由編譯器檢查;可以通過編程避免。
    • 已檢查(checked)異常:unchecked以外的異常
      • 特點:編譯時檢查,提高了程序的安全性

聲明拋出異常

  • 方法:可以告訴編譯器該方法有可能發生的錯誤。
  • public FileInputStream(String name) throws FileNotFoundException
  • 方法何時用throws聲明要拋出的異常?
    • 調用了一個拋出已檢查異常的方法,方法中沒有處理異常。
    • 程序運行時發現錯誤,利用throw拋出一個異常,方法中沒有處理異常。
  • 若一個方法拋出多個Checked異常,則在方法定義頭部列出所有的異常,每個異常用“,”分開。
    • void method1() throws Exception1,Exception2,...
  • 總結
    • 程序不應該聲明:
      • Error繼承來的異常
      • 從RuntimeException繼承來的異常(程序應該可以控制)。
    • 若方法中沒有對異常進行處理,則必須在方法頭中用throws聲明方法可能拋出的異常(已檢查異常)。
    • 一個方法拋出多個已檢查異常,在throws後全部列出。
    • 一個方法應該聲明所有可能拋出的已檢查異常,而未檢查異常要麼不可控制(Error),要麼應該避免發生

異常的捕獲和處理

在這裏插入圖片描述

在這裏插入圖片描述

  • 方法處理異常的原則
    • 處理方法能夠處理的異常
    • 不能處理的異常:拋出
      • 聲明拋出已知的異常:如方法定義中拋出的異常
      • 代碼中手工拋出:throw new ***Exception()

自定義異常

  • 自定義異常的方法
    • 繼承Exception或RuntimeException,形成異常類。
    • 構造方法:
      • 無形參的構造方法
      • String形參的構造方法,String作爲異常對象的描述信息
public class AuctionException extends Exception{
	// 無參數的構造器
	public AuctionException(){}
	// 帶一個字符串參數的構造器
	public AuctionException(String msg){
		super(msg);
	}
}

方法重寫中的異常處理

  • 重寫方法需要拋出與原方法所拋出異常類型一致(相同的類或子類)的異常或不拋出異常
class A {
	public void method() throws IOException{...}
}
class B1 extends A{
	public void method() throws FileNotFoundException{...}
}
class B2 extends A{
	public void method() throws Exception{...}
}//錯誤的
class B3 extends A{
	public void method(){...}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章