1. 程式人生 > >Java checked 異常 和 RuntimeException(執行時異常)

Java checked 異常 和 RuntimeException(執行時異常)

目錄

   一、執行時異常

     1、什麼是RuntimeExceptioin
     2、執行時異常的特點
     3、如何運用執行時異常

   二、執行時異常和ckecked異常的區別

     1、機制上
     2、邏輯上  

一、執行時異常

1、什麼是執行時異常

程式在執行過程中出現的異常,RumtimeException 是 Exception 的一個子類
我們可以檢視Java API 文件

貼張示意圖
這裡寫圖片描述

2、執行異常的特點

一般來說,我們在方法體內出現異常,我們用throw 關鍵字 將 異常物件或 異常物件的引用丟擲,如果當前方法無法處理異常,那麼必須在方法的引數列表後方法體前 必須 用 throws 宣告異常所屬類,交給呼叫者去處理。但是RuntimeException是非常特殊的子類,你可以不用throw和throws,哪怕你throw了,也沒必要thtows,即使你throws了,呼叫者也沒必要try-catch

1> 如果在函式內容中丟擲該類異常或其子類異常,函式上可以不用宣告,編譯一樣通過

2> 如果在函式上宣告該異常,呼叫者可以不同處理(try-catch),編譯一樣通過

為什麼不用宣告 ?

之所以不用在函式上宣告,是因為不需要讓呼叫者處理,當該異常發生,希望程式停止,因為在執行時,出現了無法繼續運算的情況,希望程式停止後由程式設計師對程式碼進行修正。

3、如何運用執行時異常

自定義異常時,如果該異常的發生,無法繼續進行執行,就讓自定義異常類繼承RuntimeException

再貼一張簡單示意圖 Object 中的 wait(long timeout)方法,繼續檢視

Java API 文件 對該方法的描述
這裡寫圖片描述

二、執行時異常和ckecked異常的區別

對於異常分兩種:檢查異常和非檢查異常(執行時異常)

檢查異常 : 編譯時被檢測的異常 (throw後,方法有能力處理就try-catch處理,沒能力處理就必須throws)。編譯不通過,檢查語法(其實就是throw和throws的配套使用)。

執行時異常 : 編譯時不被檢查的異常(執行時異常。RuntimeException及其子類)。編譯通過。

1、機制上

主要表現在以下兩個方面 :
(1)如何定義方法
(2)如何處理丟擲的異常

執行時異常,不需要用throws 宣告丟擲 異常物件所屬類,也可以不用throw 丟擲異常物件或異常引用。對於呼叫該方法,也不需要放於 try-catch 程式碼塊中。(為什麼 ? 如果你捕獲它,就會冒這麼一個風險:程式程式碼錯誤被掩蓋在執行中無法察覺)

而檢查異常 : 一旦 用throw 丟擲異常,如果當前方法 可處理異常,那麼直接在該方法內用try-catch 去處理。如果當前方法不具備處理該異常的能力,那麼就必須在 引數列表後方法體前用 throws 宣告 異常 所屬類,交給呼叫該方法的 呼叫者(方法) 去處理 。

2、邏輯上

從邏輯的角度來看, checked 異常 和 RuntimeException 有著不同的使用目的,檢查性異常 用來指示 一種呼叫方能夠直接處理的異常情況(例如: 使用者輸入錯誤,程式可以直接捕獲並處理,提示使用者輸入錯誤), 而RuntimeException 是用來指 呼叫方 本身無法 處理或回覆 的程式錯誤(例如,你封裝個庫給別人用,當別人呼叫你庫中某個方法是,需要傳入某些引數,如果使用者傳入的引數不合法,你自己沒辦法處理,那麼刺客你丟擲的就應該是執行時異常)。

我個人感覺,RuntimeException 跟OC 中的 斷言(NSAlert) 有點像哦

進一步思考 : 前面的知識點有降到,攜帶引數的構造方法既可以為物件賦初始值,還可以為物件 賦一個合理的值。例如,初始化一個長方形物件,用構造方法給定 width 和 length ,我們可以在構造方法裡面判斷 長 寬 值的合理性,但是如果此時你初始化這個物件成功後,你呼叫 求面積的方法,返回一個 值,那麼這個值 是異常值。按照所學的知識,我們一般會在求面積的方法,判斷值的合理性,如果不合理丟擲異常。但是,反過來想,如果我一開始讓你傳入 的 width 和 length 就丟擲異常呢,這個直接讓你初始化物件不成功 是不是好點。因為你有可能不知道 我 求面積的方法是怎麼實現的,就算我給你丟擲異常,你也不知道如何處理。(通過這點,我們也瞭解到一個小知識點,構造方法也是可以丟擲異常的,而且,丟擲異常的型別通常是執行時異常)

相關推薦

Java checked 異常 RuntimeException(執行異常)

目錄 一、執行時異常 1、什麼是RuntimeExceptioin 2、執行時異常的特點 3、如何運用執行時異常 二、執行時異常和ckecked異常的區別 1、機制上 2、邏輯上

java異常執行異常執行異常

RuntimeException RunntimeException的子類: ClassCastException 多型中,可以使用Instanceof 判斷,進行規避

Java執行異常執行異常

1.Java異常機制 Java把異常當做物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。Java中的異常分為兩大類:錯誤Error和異常Exception,Java異常體系結構如下圖所示: 圖片來源:http://blog.c

執行異常執行異常(一般異常)的區別

一,異常的概念 Java異常類層次結構圖: Throwable: 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。 Error(錯誤):是程式無法處理的錯誤,表示執行應用程式中較嚴重問題。大多數錯誤與程式碼編

通俗理解執行異常執行異常(一般異常

一,異常的概念 Java異常類層次結構圖: Throwable: 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。 Error(錯誤):是程式無法處理的錯誤,表示執行

每天一道面試題-執行異常執行異常-你分清楚了嗎?

面試中,經常會遇到這樣的情況,問:談談執行時異常和非執行時異常?答:執行時異常是指程式執行時發生的異常問:那麼非執行時異常又是什麼時候發生?答:。。。。。。問:請羅列幾個常見的執行時異常?答:空指標異常,IOException,SQLException,陣列越界異常。。。。以

Java檢查異常、非檢查異常執行異常、非執行異常的區別

Java把所有的非正常情況分為兩種:異常(Exception)和錯誤(Error),它們都繼承Throwable父類。  Java的異常(Exception和Error)分為檢查異常和非檢查的異常。 其中根據Exception異常進行分類,可分為執行時異常和非執行時異常。   檢查

(二)對比ExceptionError,執行異常與一般異常的區別

Excpetion和Error都是繼承了Throwable,在java中只有Throwable型別的例項才能丟擲throw或者捕獲catch,它是異常處理機制的基本組成型別。 Exception:是程式正常執行情況下,可以預料的意外情況,可以並且應該被捕獲,進行

對比ExceptionError,執行異常一般異常

為什麼要處理異常? 程式中一旦遇到異常就會結束程,異常之後的程式就不會執行了,並將錯誤報告給使用者。eg:int i=1/0;就會產生異常。所以要保證程式能正常執行,就必須處理異常。 public static void main(String[] args) { System.out

對比ExceptionError——執行異常與一般異常的區別

1、Exception 和 Error 都是繼承了 Throwable 類,在 Java 中只有 Throwable 型別的例項才可以被丟擲(throw)或者捕獲(catch),它是異常處理機制的基本組成型別。 2、Exception 是程式正常執行中,可以預

執行異常與非執行異常的區別

java執行時異常是可能在java虛擬機器正常工作時丟擲的異常。 java提供了兩種異常機制。一種是執行時異常(RuntimeExepction),一種是檢查式異常(checked execption)(非執行時異常)。 檢查式異常:我們經常遇到的IO異常及sql異常就屬於

關於執行異常(Runtime Exception)受檢查的異常(Checked Exception)以及系統異常普通異常的一些總結

Exception 表示程式還能夠克服和恢復的問題,Exception 類又分為執行時異常(Runtime Exception)和受檢查的異常(Checked Exception),所謂執行時異常就是開發人員編寫程式碼時不會報紅,但是執行不得當的話會執行出錯,也

常見的執行異常(RuntimeException) 複製中的異常處理

空指標異常: NullPointerException 陣列下標越界異常:ArrayIndexOutOfBoundsException 字串下標越界異常:StringIndexOutOfBoundsException 不合法的引數異常:IllegalArgumentExce

java異常處理 Exception、error、執行異常一般異常有何異同

一、開場白 對於程式執行過程中的可能出現異常情況,java語言使用一種稱為異常處理的錯誤捕捉機制進行處理。相信大家對 try { }catch( ){} finally{} 這種結構非常熟悉,使用頻率極高。既然經常使用它,而且也是面試常問知識點,我們就有必要去

java編譯異常執行異常

一 什麼是編譯時異常,什麼是執行時異常 執行時異常可以通過改變程式避免這種情況發生,比如,除數為0異常,可以先判斷除數是否是0,如果是0,則結束此程式。從繼承上來看,只要是繼承RunTimeException類的,都是執行時異常,其它為編譯時異常。 二編譯時異常和執

執行異常與受檢查異常有何異同(runtime exception checked exception)

Throwable是所有Java程式中錯誤處理的父類 ,有兩種資類:Error和Exception。Error:表示由JVM所偵測到的無法預期的錯誤,由於這是屬於JVM層次的嚴重錯誤 ,導致JVM無法繼續執行,因此,這是不可捕捉到的,無法採取任何恢復的操作,頂多只能顯示錯誤

java的常見執行異常及其原因

轉自:https://blog.csdn.net/jarvan_song/article/details/52584608 NO.1 java.lang.NullPointerException   這個異常大家肯定都經常遇到,異常的解釋是 “程式遇上了空指標 “,簡單地說就是呼叫了未經初始

Java執行異常與編譯異常區別

Java中用2種方法處理異常: 1.在發生異常的地方直接處理; 2.將異常拋給呼叫者,讓呼叫者處理。 Java異常可分為3種:   (1)編譯時異常:Java.lang.Exception   (2)執行期異常:Java.lang.RuntimeException   (3)

雜談——執行異常普通異常有什麼區別

說到異常,大家都熟悉,只要程式出錯了,那麼肯定會說:“哎呀,我的程式出錯啦~它丟擲異常啦”。 但單單以“異常”的名稱來稱呼它們,未免也太粗糙了。我們畢竟是一個精緻的程式設計師,當然得知道他們到底都有哪些種類啦。這就好比一個優質的男朋友(比如本帥博主)必須能夠精準地區分女朋友的口紅色號一般。

java中最常見的幾種執行異常,你get了嗎?

NullPointerException  (空指標異常) ClassCastException  (型別強制轉換異常) NumberFormatException  (數字格式異常) NegativeArraySizeException  (陣列大小為負數異常) SecurityException