摘要:因為是由虛擬機自動拋出并自動捕獲,所以又叫非檢查異常。多異常捕獲在之前,對多種的異常只能使用多個來進行捕獲。注意多種異常類型之間用豎線隔開。多重塊后面,最好再有個塊用來捕獲異常,防止遺漏。期待自己的異常進階。
異常的體系機構
Java提供了豐富的異常類,而這些異常類之間又有這嚴格的繼承關系。下面讓我們看一下Java中異常的體系結構。
首先,Java將所有的不正常情況分為兩種,一種是錯誤(Error),另一種就是我們所說的異常(Exception)。
Error錯誤是我發恢復,不能獲取的,如系統崩潰,虛擬機錯誤,動態鏈接失敗等。這會導致程序直接中斷。
Exception是我們常說的異常,他又大致分為兩類,一類是運行時異常:RuntimeException,另一類就是其他異常。因為RuntimeException是由Java虛擬機自動拋出并自動捕獲,所以又叫非檢查異常。而另一類異常就不一樣了,需要我們手動的捕獲和處理異常,所以叫做檢查異常。
異常的捕獲介紹了異常的大概情況,下面我們啊來說說如何捕獲處理異常。
try...catch...首先,我們先想一下,如果沒有我們使用最原始的解決異常是個什么辦法:
if (異常1) { 處理 } else if (異常2) { 處理 } else { 處理 }
沒錯,就是一大長串的if...else,對每種異常情況進行處理。所以這時我們就希望有一種更加強大的if塊,可以一下子表示所有的異常情況然后處理掉。這就有了我們的try...catch。
try { // 業務實現代碼 ... } catch (Exception e) { // 對異常的處理 }
如果try塊里的業務邏輯代碼出現了異常,系統就會生成一個異常對象,然后將該對象提交給Java運行時環境(throw),接著查找catch塊,如果找到了合適的catch塊,就將該異常對象交由該catch塊處理。這個過程又叫做捕獲(catch)異常;如果找不到合適的catch塊,程序將退出。
多異常捕獲在Java7之前,對多種的異常只能使用多個catch來進行捕獲。
try { // 業務實現代碼 ... } catch (Exception1 e1) { ... } catch (Exception2 e2) { ... } catch (Exception3 e3) { ... }
但是從Java7開始,多個異常可以使用同一個catch來捕獲。
注意:
1.多種異常類型之間用豎線“|”隔開。finally回收資源
2.異常變量有隱式final修飾,因此不能對異常變量重新賦值。
3.父類異常要在子類異常以后捕獲。
finally,最終的,也就是我們處理完異常最后要做的事情。由于有時候我們會在try塊里面使用一些資源,這些資源最后也就在finally塊里被回收掉了。
try { // 業務實現代碼 } catch (Exception e) { // 異常處理 } finally { // 資源回收 }
當然了,如果你說我沒有使用資源,不想在finally塊里做資源回收的操作,也是可以的。
異常鏈首先說說為什么會有異常鏈這種東西。因為對于一個完整的應用而言,都是有比較嚴格的分層關系的,上層依賴下層的API。而對于用戶而言,我們不想看到底層的SQL異常,同時也會使得系統不安全。所以這時我們就要將底層的異常捕獲,然后再拋出一個新的業務異常,就可以在新的異常中給出用戶比較友好的提示信息。
try { // 業務邏輯的實現 } catch (SQLException e) { // 記錄原始異常 ... // 拋出新的異常 throw new AnotherException("訪問數據庫出現異常"); }
或者我們也可以這樣處理異常:
try { // 業務邏輯的實現 } catch (SQLException ex) { // 記錄原始異常 ... // 拋出新的異常 throw new AnotherException(ex); }
這是由于Throwable基類有了一個可以接受Exception參數的方法。
總結對于異常的了解,我還處于入門階段,雖然平時的項目中也會遇到各種各樣的異常,然后解決異常,但是也只能說是對異常有了一個了解。這里也是總結一下前人對于異常的經驗吧。
1.不要過多的使用try...catch,盡量使用邏輯去規避異常。
2.多重catch塊后面,最好再有個catch塊用來捕獲Exception異常,防止遺漏。
3.盡量去處理異常,不要只是簡單的使用printStackTrace()打印異常。
相信隨著編程經歷的豐富,我對于異常的理解也會有更進一步的提升。期待自己的Java 異常進階。
友情鏈接:https://www.imooc.com/learn/110
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76747.html
摘要:異常發生時如何處理,提供了解決辦法異常處理機制。只要在程序中產生了異常,就會用一個對應類型的異常對象來封裝異常,會試圖尋找異常處理程序來處理異常。中,異常處理的任務就是將執行控制流從異常發生的地方轉移到能夠處理這種異常的地方去。 前言 概述:異常就是java程序在運行過程中出現的錯誤。 異常發生時如何處理,java提供了解決辦法:異常處理機制。 java中的異常可以是函數中的語句執行...
摘要:系列博文目錄編程思想學習錄連載之一切都是對象編程思想學習錄連載之初始化與清理編程思想學習錄連載之內部類編程思想學習錄連載之異常本篇文章將講述關于異常的相關知識注本文首發于公眾號,可長按或掃描下面的小心心來訂閱基本概念使用異常來提供一致性的錯 showImg(https://segmentfault.com/img/remote/1460000013228854); Thinking ...
摘要:阻止當前方法或作用域的,稱為異常。一非檢查異常和,以及她們的子類。強制要求對這類異常做預備處理使用或者。這樣的異常一般是由程序的運行環境導致的。后跟的是異常對象,或者異常對象的引用。 異常 什么是異常 相異與常態,和正常情況下不一致,有錯誤出現。 阻止當前方法或作用域的,稱為異常。 異常分類 showImg(https://segmentfault.com/img/bVbfpnY?w=...
摘要:允許存在多個,用于針對不同的異常做不同的處理。表示程序可能需要捕獲并且處理的異常。因此,我們應該盡可能的避免通過異常來處理正常的邏輯檢查,這樣可以確保不會因為發生異常而導致性能問題。異常表中的每一條記錄,都代表了一個異常處理器。 showImg(https://segmentfault.com/img/remote/1460000017918154?w=640&h=100); show...
閱讀 2078·2023-04-25 17:57
閱讀 1284·2021-11-24 09:39
閱讀 2482·2019-08-29 16:39
閱讀 3311·2019-08-29 13:44
閱讀 3117·2019-08-29 13:14
閱讀 2313·2019-08-26 11:36
閱讀 3810·2019-08-26 11:00
閱讀 948·2019-08-26 10:14