Java checked 異常 和 RuntimeException(運行時異常)__Java

來源:互聯網
上載者:User

目錄

   一、運行時異常     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 就拋出異常呢,這個直接讓你初始化對象不成功 是不是好點。因為你有可能不知道 我 求面積的方法是怎麼實現的,就算我給你拋出異常,你也不知道如何處理。(通過這點,我們也瞭解到一個小知識點,構造方法也是可以拋出異常的,而且,拋出異常的類型通常是運行時異常)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.