Java異常處理:
異常處理:
一:異常:
程式在執行過程中出現的不正常的現象
二:分類:
異常和錯誤的區別:宜昌市程式設計師能夠處理的情況,而錯誤一般是硬體,執行環境設計等原因導致的,程式設計師不能去處理的情況
執行時異常和編譯時異常的區別:一般來說,執行時異常為語義錯誤,而編譯時異常為語法錯誤,連編譯都無法通過;
三:異常處理 ——抓住異常
1.三個主要的關鍵字:
try(程式塊中可能有異常) -> catch(如果有異常,那麼進入到catch中處理) -> finally
try:包含可能產生異常的塊,必須書寫;
catch:異常處理塊(可有多個,也可以一個catch匹配多種異常型別;注意語法);先與tay中產生的異常進行匹配,若匹配成功,則進入執行;
finally:finally塊不管異常是否發生,只要對應的try執行了,則它一定也執行(即使在catch中有return 也會執行)。(值得注意:當catch中有return語句,finally語句中也有return語句,則catch中的return會被覆蓋,故finally語句中不應該有return語句,)只有一種方法讓finally塊不執行:System.exit()(//關閉虛擬機器);因此finally塊通常用來做資源釋放操作:關閉檔案,關閉資料庫連線等等。
注意區別:
final:方法修飾符
finall:異常處理的關鍵字
finalize:它是Objec的一個方法(垃圾回收時呼叫)
2.處理步驟:
情況一:有了try-catch處理,程式在執行過程中,出現了異常,並在處理時產生的異常和catch的異常匹配,進入catch處理,異常處理結束;
情況二:有了try-catch處理,程式在執行過程中,沒有出現了異常,不進入catch處理,異常處理結束;
情況三:有了try-catch處理,程式在執行過程中,出現了異常,但和catch匹配失敗,程式終止執行;
情況四:有了try-catch處理,並有多個catch處理塊,程式在執行過程中,出現了異常,和catch自頂向下依次匹配,若匹配成功,則執行,異常處理成功,若全部匹配失敗,程式終止執行;
情況五:finall塊不管發生什麼情況都會執行
注意事項:
異常處理程式碼的書寫順序:Try->catch->finally
Try為可能產生異常的塊,必須書寫
catch為處理異常的塊,必須書寫,可以有1~N個
finally可寫可不寫
如果有多個catch塊,必須按先子類後父類的順序書寫,否則報錯;
常見異常:
java.long.ArithmeticException 數異常
java.long.ArrayIndexOutOfBoundsException 陣列越界
java.long.IllegalArgumtException 方法的引數錯誤
ClassCastException 型別強制轉換錯誤
java.long.NumberFormatException
FileNotFoundException 檔案未找到異常
SQlException 操作資料庫異常
IOException 輸入輸出異常
四:異常處理——丟擲異常
通過throw語句手動顯式的丟擲一個異常
步驟:在方法宣告時,用 throws 異常型別 先宣告可能要丟擲異常;
可用try產生異常,用catch處理時用 throw 異常物件 丟擲異常;
在主調函式中用try接收,catch處理,可再次丟擲,或常規處理;
五:自定義異常
如果要自定義異常類,則擴充套件Exception類即可,因此這樣的自定義異常都屬於檢查異常(checked exception)。如果要自定義非檢查異常,則擴充套件自RuntimeException。
方法:
e.printStackTrace(); //打出錯誤的堆疊資訊