Java異常處理機(jī)制try catch流程詳解
在項(xiàng)目中遇到try...catch...語(yǔ)句,因?yàn)閷?duì)Java異常處理機(jī)制的流程不是很清楚,導(dǎo)致對(duì)相關(guān)邏輯代碼不理解。所以現(xiàn)在來(lái)總結(jié)Java異常處理機(jī)制的處理流程:
1.異常處理的機(jī)制如下:在方法中用 try... catch... 語(yǔ)句捕獲并處理異常,catch 語(yǔ)句可以有多個(gè),用來(lái)匹配多個(gè)不同類型的異常。對(duì)于處理不了的異?;蛘咭D(zhuǎn)型的異常,在方法的聲明處通過(guò) throws 聲明異常,通過(guò)throw語(yǔ)句拋出異常,即由上層的調(diào)用方法來(lái)處理該異常。
try { 邏輯程序塊 } catch(ExceptionType1 e) { 處理代碼塊1 } catch (ExceptionType2 e) { 處理代碼塊2 throw(e); // 再拋出這個(gè)"異常" }
2.Exception 是程序正常運(yùn)行過(guò)程中可以預(yù)料到的意外情況,并且應(yīng)該被開(kāi)發(fā)者捕獲,進(jìn)行相應(yīng)的處理。
Exception 可以以兩種方式出現(xiàn):
一是發(fā)生在程序編譯時(shí)或運(yùn)行時(shí)發(fā)生異常,是被程序拋出,用戶沒(méi)有主動(dòng)拋出異常;二是用戶主動(dòng)拋出異常,使用throw關(guān)鍵字主動(dòng)拋出異常。該異??梢允菢I(yè)務(wù)邏輯的異常。
try { // 可能發(fā)生異常的語(yǔ)句 } catch(ExceptionType e) { // 處理異常語(yǔ)句 }
3.執(zhí)行流程
try語(yǔ)句塊中發(fā)生了異常
如果try語(yǔ)句塊中發(fā)生了異常,那么程序就會(huì)把對(duì)應(yīng)的異常對(duì)象拋出,然后catch語(yǔ)句就會(huì)捕獲該異常并且處理。
注意:如在try語(yǔ)句塊的第二句語(yǔ)句發(fā)生異常,那么在第二句以后的語(yǔ)句都不會(huì)執(zhí)行了,轉(zhuǎn)到catch語(yǔ)句塊中開(kāi)始執(zhí)行。處理完catch語(yǔ)句塊的內(nèi)容,就會(huì)執(zhí)行catch語(yǔ)句塊之后的內(nèi)容
try語(yǔ)句塊中沒(méi)有發(fā)生異常
如果try語(yǔ)句塊中沒(méi)有發(fā)生異常,那么try語(yǔ)句塊中的內(nèi)容會(huì)由上到下依次執(zhí)行,然后catch語(yǔ)句塊會(huì)全部被跳過(guò),接下來(lái)執(zhí)行catch語(yǔ)句塊之后的內(nèi)容。
舉個(gè)栗子:
public class ExceptionTest { public static void main(String[] args) { for (int i = 0; i < 3; i++) { String message = ""; int a = 0; try{ if (i == 1){ throw new Exception("錯(cuò)誤"); } message = "正確"; a= 123; }catch (Exception e){ message = e.getMessage(); } System.out.println( "i 等于" + i); System.out.println(message ); System.out.println("a = " + a+ "\n"); } } }
輸出結(jié)果分析:
當(dāng)有i = 2時(shí),用戶主動(dòng)拋出異常,可以看到為 message= "正確";a =123;的賦值語(yǔ)句沒(méi)有執(zhí)行, 進(jìn)入到catch語(yǔ)句塊中,然后再執(zhí)行catch語(yǔ)句塊以后的內(nèi)容message = e.getMessage(); 這里message = "錯(cuò)誤",因?yàn)閠hrow new Exception("錯(cuò)誤"); 在拋出異常時(shí)賦值了message為"錯(cuò)誤";
message = "錯(cuò)誤"
a = 0
輸出結(jié)果
i 等于0
正確
a = 123
i 等于1
正確
a = 123
i 等于2
錯(cuò)誤
a = 0
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用gRPC微服務(wù)的內(nèi)部通信優(yōu)化
這篇文章主要為大家介紹了微服務(wù)優(yōu)化之使用gRPC做微服務(wù)的內(nèi)部通信,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03java面向?qū)ο蠡A(chǔ)_final詳細(xì)介紹
本文將詳細(xì)介紹java final 對(duì)象的使用,需要了解更多的朋友可以參考下2012-11-11Java連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)方式
文章講述了Java連接MySQL數(shù)據(jù)庫(kù)的詳細(xì)步驟,包括下載和導(dǎo)入JDBC驅(qū)動(dòng)、創(chuàng)建數(shù)據(jù)庫(kù)和表、以及編寫(xiě)連接和讀取數(shù)據(jù)的代碼2024-11-11ssm框架+PageHelper插件實(shí)現(xiàn)分頁(yè)查詢功能
今天小編教大家如何通過(guò)ssm框架+PageHelper插件實(shí)現(xiàn)分頁(yè)查詢功能,首先大家需要新建一個(gè)maven工程引入jar包,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06