摘要:異常體系首先,標志這是一個異常。區分這兩類異常主要特性是是否受檢。運行時異常雖然可以不進行處理,但是可能導致線程終止或者應用終止。
在使用JdbcTemplate中queryForObject方法的時候拋出一個異常:
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
queryForObject的內部邏輯是這樣的:使用queryForObject時,會查詢一個結果,當查詢中結果多余一個或者沒有都會拋出一個異常IncorrectResultSizeDataAccessException。這個向外拋出的異常為什么不需要我使用try-catch處理或者繼續向外拋出呢?下面的圖片展示這個異常的繼承結構。
Google之后認識到所有運行時異常都可以不向外拋出。為了更加快速的解決問題,決定對Java異常進行更深入的學習。
Java異常體系
首先,Throwable標志這是一個異常。
其次,Throwable有兩個子類分別是Error和Exception,Error表示的是JVM發生的異常,如內存溢出,這是應用自身程序本身無法處理的異常;而Exception則表示應用程序自身可以處理的異常。
最后,Exception的子類分為兩類,一個是RuntimeException,另外就是其他繼承自Exception的異常,如IOException。區分這兩類異常主要特性是是否受檢。
什么是受檢異常,什么是非受檢異常? 本質上,受檢異常指的是會受到Java 編譯器檢測的異常,也就是說當你的一個方法中有拋出一個受檢異常時, 你必須對它進行處理,使用try-catch或者向上拋出進行處理。非受檢異常指的是不會受到Java編譯器檢測的異常, 當你的一個方法中拋出了非受檢異常時,你不需要進行處理。 Java意圖上使用非受檢異常來表示由于軟件開發人員導致的錯誤,如NullPointerException;而使用 受檢異常來表示一些用戶誤操作的錯誤,如IOException。“The Java Tutorial”告訴我們通常情況下我們 應該拋出受檢異常,而不要拋出非受檢異常。 想一想,如果是來自外部的數據有錯誤,我們可以拋出異常來說明用戶傳入的參數有錯誤;而如果是開發人員導致的 錯誤,且我們開發人員自己都知道自己的代碼有異常,那直接改正不久好了,干嘛還要向外拋出呢!所以通常是不會 繼承非受檢異常的。
運行時異常雖然可以不進行處理,但是可能導致線程終止或者應用終止。如果是非主線程,則由Thread.run()拋出異常后,線程終止。如果是主線程(即main方法)拋出異常,則應用終止。
有興趣可以將下面的代碼復制到編譯器中來檢測受檢異常和非受檢異常。
public class Main { public void caller() { callee(); } public void callee() throws Exception{ throw new Exception(); } }
上面的代碼中在調用callee方法的時候將編譯不過。
public class Main { public void caller() { callee(); } public void callee(){ throw new RuntimeException(); } }
上面的代碼將不會有任何告警。
參考:
Java 的 Checked 和 Unchecked Exception【譯】
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74786.html
摘要:案例演示該句運行時發生了數組索引越界異常,由于沒有處理異常,導致程序無法繼續執行,程序結束。用來進行某種異常的捕獲,實現對捕獲到的異常進行處理。運行時期異常一旦發生需要程序人員修改源代碼。 01異常的概述 * A: 異常的概述 * a:什么是異常 * Java代碼在運行時期發生的問題就是異常。 * b:異常類 * 在Java中,把異常信息...
摘要:異常,可以有針對性的處理方式無論是錯誤還是異常,它們都有具體的子類體現每一個問題,它們的子類都有一個共性,就是都以父類名才作為子類的后綴名。特殊情況對應多個時,如果有父類的語句塊,一定要放在下面。聲明的原因是需要調用者對該異常進行處理。 異 常:★★★★異常:就是不正常。程序在運行時出現的不正常情況。其實就是程序中出現的問題。這個問題按照面向對象思想進行描述,并封裝成了對象。因為問題的...
閱讀 908·2023-04-25 18:51
閱讀 1862·2021-09-09 11:39
閱讀 3275·2019-08-30 15:53
閱讀 2090·2019-08-30 13:03
閱讀 1303·2019-08-29 16:17
閱讀 574·2019-08-29 11:33
閱讀 1877·2019-08-26 14:00
閱讀 2118·2019-08-26 13:41