c++異常處理機(jī)制是怎么樣的

這篇文章主要介紹了c++異常處理機(jī)制是怎么樣的,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為零陵企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作零陵網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

當(dāng)一個(gè)程序出現(xiàn)錯(cuò)誤時(shí),它可能的情況有3種:語法錯(cuò)誤,運(yùn)行時(shí)錯(cuò)誤和邏輯錯(cuò)誤。語法錯(cuò)誤是指代碼的格式錯(cuò)了,或者某個(gè)字母輸錯(cuò)了;運(yùn)行時(shí)錯(cuò)誤是指在程序運(yùn)行的時(shí)候出現(xiàn)的一些么有想到的錯(cuò)誤,如:空指針異常,數(shù)組越界,除數(shù)為零等;邏輯錯(cuò)誤是指運(yùn)行結(jié)果與預(yù)想的結(jié)果不一樣,這是一種很難調(diào)試的錯(cuò)誤。而java中的異常處理機(jī)制主要是指處理運(yùn)行時(shí)錯(cuò)誤,即異常就是運(yùn)行時(shí)錯(cuò)誤。

產(chǎn)生異常的原因有3中:1.java內(nèi)部發(fā)生錯(cuò)誤,java虛擬機(jī)產(chǎn)生的異常。2.編寫程序的時(shí)候由于錯(cuò)誤引起的異常,如:空指針異常,數(shù)組越界等。3.通過throw語句生成的異常。這種異常通常稱為“檢查異?!?,用來告知方法的調(diào)用著相關(guān)信息。

java通過面向?qū)ο蟮姆椒ㄌ幚懋惓?。在一個(gè)方法的運(yùn)行過程中如果出現(xiàn)了異常,這個(gè)方法就會(huì)產(chǎn)生代表該異常的一個(gè)對象,把它交給運(yùn)行時(shí)系統(tǒng),運(yùn)行時(shí)系統(tǒng)尋找相應(yīng)的代碼來處理這一異常。其中,生成異常對象,并把它交個(gè)運(yùn)行時(shí)系統(tǒng)的過程稱為拋出(throw)。運(yùn)行時(shí)系統(tǒng)在方法的調(diào)用棧中查找,直到找到能處理該異常的對象的過程稱為捕獲(catch)。

一、異常的分類

在java中,任何異常都屬于java.lang.Throwable類或其子類,Throwable類又分為Exception類和Error類。其中Exception類用于用戶所出現(xiàn)的各種異常,它也可用來創(chuàng)建自定義類型的類。Error類異常是指java程序運(yùn)行時(shí)與運(yùn)行是系統(tǒng)本身有關(guān)的錯(cuò)誤,這些異常通常是災(zāi)難性的,不是程序可以控制的。

Exception類的異常又分為運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常。其中運(yùn)行時(shí)異常是指RuntimeException類及其子類,這些異常不檢查異常,可以選擇捕獲處理,也不可以不處理。非運(yùn)行時(shí)錯(cuò)誤是除RuntimeException類以外的異常,這些異常必須處理,否則會(huì)導(dǎo)致程序編譯不能通過。

二、異常處理機(jī)制

處理異常的方式主要有兩種:積極的處理方式和消極的處理方式。

積極的處理方式主要是使用try...catch,程序先執(zhí)行try中的語句,當(dāng)try中的語句出現(xiàn)異常時(shí),就停止當(dāng)前程序的執(zhí)行,轉(zhuǎn)入到catch中執(zhí)行語句,若catch語句中出現(xiàn)異常,程序也會(huì)停止執(zhí)行,然后轉(zhuǎn)到catch的下一個(gè)程序繼續(xù)執(zhí)行。也就是說try語句用來發(fā)現(xiàn)異常,而catch語句用來處理異常。通常在catch語句后會(huì)跟一個(gè)final語句,與try...catch語句結(jié)合使用,無論try和catch中是否出現(xiàn)異常,final中的語句都會(huì)直線。如果一個(gè)方法必須返回一個(gè)值的話,那么把return語句放到final中最合適了,因?yàn)橐欠诺絫ry或catch中的任何一個(gè),如果運(yùn)行過程中出現(xiàn)異常的話,程序就會(huì)停止執(zhí)行,也就無法執(zhí)行retrun了。

消極的處理方式是指用throw和throws來實(shí)現(xiàn)。throw會(huì)主動(dòng)拋出一個(gè)異常,并終止程序的運(yùn)行。throws用在方法后面,表示聲明一個(gè)異常,告訴方法的使用者方法中出現(xiàn)了哪些異常,讓使用者根據(jù)自己的情況處理這些異常。

1.try...catch語句格式

c++異常處理機(jī)制是怎么樣的

catch語句的參數(shù)包括一個(gè)異常類型和一個(gè)異常對象,異常對象必須為Throwable的子類,指明了catch語句可以處理的異常類型。catch語句可以有多個(gè),分別處理不同類型的異常。一個(gè)catch語句也可以捕捉多個(gè)異常類型,此時(shí),catch的異常類型參數(shù)應(yīng)該是這些異常類型的父類。

下面是一個(gè)try...catch語句的使用實(shí)例:

c++異常處理機(jī)制是怎么樣的

這里的e表示產(chǎn)生的異常對象,通過toString()方法可以獲得產(chǎn)生異常的原因,用printStackTrace()方法可以獲得產(chǎn)生異常的原因及其位置。

2.多個(gè)catch語句

當(dāng)某個(gè)程序塊可能出現(xiàn)錯(cuò)個(gè)異常時(shí),可以用多個(gè)catch語句,每個(gè)catch語句捕獲一種異常,當(dāng)拋出異常時(shí),每個(gè)catch一次檢查。當(dāng)***個(gè)catch語句執(zhí)行時(shí),其它的catch語句暫不執(zhí)行,而當(dāng)該catch執(zhí)行結(jié)束后就會(huì)一次執(zhí)行下一個(gè)catch語句。

要注意的是:當(dāng)使用多個(gè)catch語句時(shí),catch語句塊要有先后之分。如果父類異常在子類異常前面的話,首先執(zhí)行的是父類異常,子類異常將永遠(yuǎn)不會(huì)執(zhí)行,這樣在程序運(yùn)行的時(shí)候就會(huì)出現(xiàn)錯(cuò)誤。

3.final語句

前面介紹過,不管try和catch語句時(shí)候會(huì)出現(xiàn)異常,final語句都會(huì)執(zhí)行。final執(zhí)行的情況有以下三種:

(1)如果try語句中沒有出現(xiàn)異常,則執(zhí)行完try語句后就會(huì)執(zhí)行final語句,接著執(zhí)行其后的語句。

(2)如果try語句出現(xiàn)異常,并且拋出的異常被catch捕捉到的話,程序的執(zhí)行就會(huì)在出現(xiàn)異常地方停止,轉(zhuǎn)而執(zhí)行與之相匹配的catch語句,***執(zhí)行final語句,如果final語句沒有出現(xiàn)異常,則繼續(xù)執(zhí)行下面的語句,如果final語句出現(xiàn)異常,就把該異常傳遞給該方法的調(diào)用者。

(3)如果try語句中拋出的異常沒有被catch語句捕捉到,將直接執(zhí)行final語句,并把該異常傳遞給該方法的調(diào)用者。

三、拋出和聲明異常

1.拋出異常

可以使用throw語句拋出異常,它的基本形式是

c++異常處理機(jī)制是怎么樣的

這里ThrowableInstance一定是Throwable類或者它的一個(gè)子類

2.聲明異常

如果一個(gè)方法可以導(dǎo)致一個(gè)異常但不處理該異常,就可以使用throws語句來聲明該異常,其基本形式是:

c++異常處理機(jī)制是怎么樣的

一個(gè)throws字句列舉了一個(gè)方法可能出現(xiàn)的所有異常類型,各個(gè)異常類型之間用逗號隔開。Error和RuntimeException子類的異常不需要在異常的列表中指定,而其它類型的異常必須進(jìn)行指定聲明,否則編譯的時(shí)候就會(huì)出現(xiàn)錯(cuò)誤。

四、自定義異常

java內(nèi)置的異常能夠處理大多數(shù)常見的運(yùn)行時(shí)錯(cuò)誤,但也可以自己定義,自定義異常通常重載Exception構(gòu)造方法來得到。例如:

c++異常處理機(jī)制是怎么樣的

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“c++異常處理機(jī)制是怎么樣的”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

當(dāng)前標(biāo)題:c++異常處理機(jī)制是怎么樣的
網(wǎng)站鏈接:http://muchs.cn/article38/isphpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站制作標(biāo)簽優(yōu)化、品牌網(wǎng)站制作、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)