java 自定义异常的回顾
一、異常的分類:
1.編譯時異常:編譯時被檢測的異常 (throw后,方法有能力處理就try-catch處理,沒能力處理就必須throws)。編譯不通過,檢查語法(其實就是throw和throws的配套使用)。
2.運行時異常:編譯時不被檢查的異常(運行時異常。RuntimeException及其子類)。編譯通過。
各自的特點:
>1.編譯時異常 : 一旦 用throw 拋出異常,如果當前方法 可處理異常,那么直接在該方法內(nèi)用try-catch 去處理。如果當前方法不具備處理該異常的能力,那么就必須在 參數(shù)列表后方法體前用 throws 聲明 異常 所屬類,交給調(diào)用該方法的 調(diào)用者(方法) 去處理 。
>2.運行時異常,不需要用throws 聲明拋出 異常對象所屬類,也可以不用throw 拋出異常對象或異常引用。對于調(diào)用該方法,也不需要放于 try-catch 代碼塊中。(為什么 ? 如果你捕獲它,就會冒這么一個風險:程序代碼錯誤被掩蓋在運行中無法察覺);
加深理解:
從邏輯的角度來看, checked 異常 和 RuntimeException 有著不同的使用目的,檢查性異常 用來指示 一種調(diào)用方能夠直接處理的異常情況(例如: 用戶輸入錯誤,程序可以直接捕獲并處理,提示用戶輸入錯誤), 而RuntimeException 是用來指 調(diào)用方 本身無法 處理或回復 的程序錯誤(例如,你封裝個庫給別人用,當別人調(diào)用你庫中某個方法是,需要傳入某些參數(shù),如果用戶傳入的參數(shù)不合法,你自己沒辦法處理,那么此刻你拋出的就應該是運行時異常;(構(gòu)造方法也是可以拋出異常的,而且,拋出異常的類型通常是運行時異常))。
二、自定義異常
前面所講的異常,都是系統(tǒng)自帶的,系統(tǒng)自己處理,但是很多時候項目會出現(xiàn)特有問題,而這些問題并未被java所描述并封裝成對象,所以對于這些特有的問題可以按照java的對問題封裝的思想,將特有的問題進行自定義異常封裝。在Java中要想創(chuàng)建自定義異常,需要繼承Throwable或者他的子類Exception。
三、異常的拋出
1、定義 : 一個方法不處理這個異常,而是調(diào)用層次向上傳遞,誰調(diào)用這個方法,這個異常就由誰來處理。
2、throw : 將產(chǎn)生的異常拋出(強調(diào)的是動作),拋出的既可以是異常的引用,也可以是異常對象。(位置: 方法體內(nèi))
3、throws : 如果一個方法可能會出現(xiàn)異常,但沒有能力處理這種異常,可以在方法聲明處用throws子句來聲明拋出異常。用它修飾的方法向調(diào)用者表明該方法可能會拋出異常(可以是一種類型,也可以是多種類型,用逗號隔開)(位置: 寫在方法名 或方法名列表之后 ,在方法體之前。)
注意 : 調(diào)用可能會拋出異常的方法,必須添加try-catch代碼塊嘗試去捕獲異常 或者 添加throws 聲明 來將異常 拋出給更上一層的調(diào)用者進行處理,這里需要注意一個細節(jié):新的異常包含原始異常的所有信息,根據(jù)這個我們可以去追溯最初異常發(fā)生的位置;
四、throw 和throws 關(guān)鍵字的區(qū)別
1、寫法上 : throw 在方法體內(nèi)使用,throws 函數(shù)名后或者參數(shù)列表后方法體前 ;
2、意義 : throw 強調(diào)動作,而throws 表示一種傾向、可能但不一定實際發(fā)生 ;
3、throws 后面跟的是異常類,可以一個,可以多個,多個用逗號隔開。throw 后跟的是異常對象,或者異常對象的引用。
4、throws 用戶拋出異常,當在當前方法中拋出異常后,當前方法執(zhí)行結(jié)束(throws 后,如果有finally語句的話,會執(zhí)行到finally語句后再結(jié)束。)。可以理解成return一樣。
五、未完待續(xù)。。。。
參考地址1:http://blog.csdn.net/qq_18505715/article/details/73196421
參考地址2:http://blog.csdn.net/mccand1234/article/details/51579425
參考地址3:http://www.cnblogs.com/dolphin0520/p/3769804.html
總結(jié)
以上是生活随笔為你收集整理的java 自定义异常的回顾的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 补肾药酒配方(补肾壮阳药酒的最佳配方)
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?