探索java異常處理

經過本章的學習能夠達到一下目標:java

item 瞭解異常的產生原理面試

掌握異常處理語句的基本格式bash

掌握throw和throws關鍵字的做用學習

能夠自定義異常spa

瞭解Exception與RuntimeException的區別code

瞭解斷言的做用orm

認識異常: 關於被除數不能爲0的說明: 被除數爲0在數學上的解法是無窮大,對於計算機來講,若是是無窮大,則意味着內存將所有被佔滿。 cdn

在java中異常處理的語句:對象

try{ 
		//有可能出現異常的語句
		int temp = i / j;//此處會產生異常
		System.out.println("兩個數字相除結果: " + temp);
		}catch (ArithmeticException e) { //異常類 異常對象
			// TODO: 編寫異常的處理語句
			System.out.println("出現異常來:" + e);
		}catch (Exception e) {
			// TODO: 編寫異常的處理語句
			
		}finally {
		 //必定會運行的程序代碼
		}
複製代碼

從程序的運行結果能夠清楚地發現,由於程序中加入了異常處理代碼,因此當有異常發生後,整個程序也不會由於異常的產生而中斷執行。blog

異常類的繼承結構

在整個java的異常結構中,實際上有兩個類最經常使用的類,分別是Exception和Error,這兩個類都是Throwable的子類, 以下圖:

Exception:通常表示的是程序中出現的問題,能夠直接使用try...catch處理。 Error:通常指的是JVM錯誤,程序中沒法處理。 通常狀況下,開發者習慣於將Exception和Error統稱爲異常,而算術異常、數字格式異常等都屬於Exception的子類。

java的異常處理機制

在整個java的異常處理中,實際上也是按照面向對象的方式進行處理,處理的步驟以下: 1.一旦產生異常,則首先會產生一個異常類的實例化對象。 2.在try語句中對此異常對象進行捕捉。 3.產生的異常對象與catch語句中的各個異常類型進行匹配,若是匹配成功,則執行catch語句中的代碼。

通常在開發時,無論出現任何異常時,均可以直接使用Exception進行處理,這樣會比較方便。

那麼問題來啦? 可不能夠直接使用Throwable? 首先使用Throwable捕獲異常,這在代碼中沒有任何問題,由於Throwable捕獲都範圍是最大的。但通常開發中是不會直接使用Throwable進行捕獲的,對於Throwable來講有Exception、Error兩個子類,Error類自己不須要程序處理,而程序中須要處理的只是Exception,因此不必使用Throwable。 對於一個程序來講,若是有多個異常最好分別進行捕獲,而不要直接使用Exception捕獲所有異常。

瞭解throws與throw關鍵字

在定義一個方法時可使用throws關鍵字聲明,使用throws聲明的方法表示此方法不處理異常,而交給方法的調用處進行處理,throws使用格式以下。

public  返回值類型 方法名稱(參數列表...) throws 異常類{}
複製代碼

注意:不要在主方法中使用throws。 主方法爲一切的起點,一切的操做也是主方法開始的。因此,若是在主方法中使用throws,則程序出現問題後確定交由JVM進行處理,將致使程序中斷。

throw關鍵字

與throw關鍵字不一樣的是,能夠直接使用throw關鍵字人爲地拋出一個異常,拋出時直接拋出異常類的實例化對象便可。

注意:finally語句塊的編寫要求

finally做爲異常的統一出口,因此在此語句塊的編寫中儘量不要出現像throw或return這樣的語句,這樣能夠避免沒必要要的問題出現。

Exception類與RuntimeException類

在java面試中常常會問Exception類與RuntimeException類的區別。 咱們來看下邊的代碼。

public static void main(String[] args) throws Exception{
		String str = "123";
		int temp = Integer.parseInt(str);
		System.out.println(temp*temp);
	}
複製代碼

咱們看一下parseInt方法

public static int parseInt(String s) throws NumberFormatException
複製代碼

方法throws 在聲明時使用throws關鍵字,可是在方法調用時並無使用try...catch進行處理,這是爲何呢?看一下NumberFormatException類的繼承關係,

Exception--RuntimeException--lllegalArgumentException--NumberFormatException
複製代碼

Exception在程序中必須使用try--catch進行處理。 RuntimeException能夠不使用try--catch進行處理,可是若是有異常產生,則異常將由JVM進行處理。 提示:對於RuntimeException的子類最好也使用異常處理機制。 雖然RuntimeException的異常能夠不用try...catch進行處理,可是若是一旦處理異常,則確定會致使程序中斷執行,因此,爲了保證程序在出錯後依然能夠執行,因此在開發代碼時最好使用try...catch的異常處理機制進行處理。

自定義異常類 在java中已經提供了大量的異常類,可是這些異常類有時也很難知足開發者的要求,因此用戶能夠根據本身的須要來定義本身的異常類。定義異常類只須要Exception類便可。

斷言

在JDK1.4以後,java中增長類斷言的功能。斷言是確定某一個結果的返回值是正確的,若是最終此結果的返回值是錯誤的,則經過斷言檢查確定會提示錯誤信息。斷言的定義格式以下

assert boolean 表達式
assert boolean 表達式:詳細的信息
複製代碼

開發中不提倡使用斷言。

相關文章
相關標籤/搜索