基于Java中throw和throws的區(qū)別(詳解)
系統(tǒng)自動(dòng)拋出的異常
所有系統(tǒng)定義的編譯和運(yùn)行異常都可以由系統(tǒng)自動(dòng)拋出,稱為標(biāo)準(zhǔn)異常,并且 Java 強(qiáng)烈地要求應(yīng)用程序進(jìn)行完整的異常處理,給用戶友好的提示,或者修正后使程序繼續(xù)執(zhí)行。
語句拋出的異常
用戶程序自定義的異常和應(yīng)用程序特定的異常,必須借助于 throws 和 throw 語句來定義拋出異常。
throw是語句拋出一個(gè)異常。
語法:throw (異常對象);
throw e;
throws是方法可能拋出異常的聲明。(用在聲明方法時(shí),表示該方法可能要拋出異常)
語法:[(修飾符)](返回值類型)(方法名)([參數(shù)列表])[throws(異常類)]{......}
public void doA(int a) throws Exception1,Exception3{......}
舉例:
throws E1,E2,E3只是告訴程序這個(gè)方法可能會(huì)拋出這些異常,方法的調(diào)用者可能要處理這些異常,而這些異常E1,E2,E3可能是該函數(shù)體產(chǎn)生的。
throw則是明確了這個(gè)地方要拋出這個(gè)異常。
如:
void doA(int a) throws Exception1,Exception3{
try{
......
}catch(Exception1 e){
throw e;
}catch(Exception2 e){
System.out.println("出錯(cuò)了!");
}
if(a!=b)
throw new Exception3("自定義異常");
}
代碼塊中可能會(huì)產(chǎn)生3個(gè)異常,(Exception1,Exception2,Exception3)。
如果產(chǎn)生Exception1異常,則捕獲之后再拋出,由該方法的調(diào)用者去處理。
如果產(chǎn)生Exception2異常,則該方法自己處理了(即System.out.println("出錯(cuò)了!");)。所以該方法就不會(huì)再向外拋出Exception2異常了,void doA() throws Exception1,Exception3 里面的Exception2也就不用寫了。
而Exception3異常是該方法的某段邏輯出錯(cuò),程序員自己做了處理,在該段邏輯錯(cuò)誤的情況下拋出異常Exception3,則該方法的調(diào)用者也要處理此異常。
throw語句用在方法體內(nèi),表示拋出異常,由方法體內(nèi)的語句處理。
throws語句用在方法聲明后面,表示再拋出異常,由該方法的調(diào)用者來處理。
throws主要是聲明這個(gè)方法會(huì)拋出這種類型的異常,使它的調(diào)用者知道要捕獲這個(gè)異常。
throw是具體向外拋異常的動(dòng)作,所以它是拋出一個(gè)異常實(shí)例。
throws說明你有那個(gè)可能,傾向。
throw的話,那就是你把那個(gè)傾向變成真實(shí)的了。
同時(shí):
1、throws出現(xiàn)在方法函數(shù)頭;而throw出現(xiàn)在函數(shù)體。
2、throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常;throw則是拋出了異常,執(zhí)行throw則一定拋出了某種異常。
3、兩者都是消極處理異常的方式(這里的消極并不是說這種方式不好),只是拋出或者可能拋出異常,但是不會(huì)由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調(diào)用處理。
以上這篇基于Java中throw和throws的區(qū)別(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- JAVA異常處理機(jī)制之throws/throw使用情況
- 如何區(qū)分JAVA中的throws和throw
- Java throw和throws使用區(qū)別分析
- java中throws與try...catch的區(qū)別點(diǎn)
- 簡單了解Java關(guān)鍵字throw和throws的區(qū)別
- java處理異常的機(jī)制關(guān)鍵字throw和throws使用解析
- Java異常處理與throws關(guān)鍵字用法分析
- 詳解Java異常處理中throw與throws關(guān)鍵字的用法區(qū)別
- 詳解Java編程中throw和throws子句的使用方法
- 簡單講解java中throws與throw的區(qū)別
相關(guān)文章
JAVA 多線程之信號量(Semaphore)實(shí)例詳解
這篇文章主要介紹了JAVA 多線程之信號量(Semaphore)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01
mybaits-spring的實(shí)現(xiàn)方式
這篇文章主要介紹了mybaits-spring的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
SpringBoot整合Netty服務(wù)端的實(shí)現(xiàn)示例
Netty提供了一套完整的API,用于處理網(wǎng)絡(luò)IO操作,如TCP和UDP套接字,本文主要介紹了SpringBoot整合Netty服務(wù)端的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
Java中的強(qiáng)制類型轉(zhuǎn)換 大數(shù)轉(zhuǎn)小數(shù)
這里主要討論一下大數(shù)轉(zhuǎn)小數(shù),比如int類型轉(zhuǎn)short類型。小數(shù)轉(zhuǎn)大數(shù),如short 轉(zhuǎn) int不做討論,需要的朋友可以參考下2020-02-02
springboot整合mybatis的超詳細(xì)過程(配置模式+注解模式)
這篇文章主要介紹了springboot整合mybatis的詳細(xì)過程(配置模式+注解模式),這里我使用的是配置模式+注解模式所以需要配置全局文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
Spring Boot 2.7.6整合redis與低版本的區(qū)別
這篇文章主要介紹了Spring Boot 2.7.6整合redis與低版本的區(qū)別,文中補(bǔ)充介紹了SpringBoot各個(gè)版本使用Redis之間的區(qū)別實(shí)例講解,需要的朋友可以參考下2023-02-02
MyBatisPlus批量添加的優(yōu)化與報(bào)錯(cuò)解決
MybatisPlus是一個(gè)高效的java持久層框架,它在Mybatis的基礎(chǔ)上增加了一些便捷的功能,提供了更加易用的API,可以大幅度提高開發(fā)效率,這篇文章主要給大家介紹了關(guān)于MyBatisPlus批量添加的優(yōu)化與報(bào)錯(cuò)解決的相關(guān)資料,需要的朋友可以參考下2023-05-05

