java 异常处理发生异常_处理Java中的异常
java 異常處理發(fā)生異常
每個(gè)程序員都希望編寫一個(gè)完美的程序。 也就是說,程序運(yùn)行時(shí)沒有任何障礙。
好吧,如果希望是馬,乞g就會(huì)騎。 除了程序員的所有愿望之外,有時(shí)還會(huì)發(fā)生無法預(yù)料的情況。
在Java中,這些無法預(yù)料的情況通常被歸類為“例外”。 異常會(huì)干擾我們的代碼的順利運(yùn)行,并在不處理的情況下終止程序。 處理異常涉及在異常發(fā)生時(shí)編寫另一組代碼來管理這些異常。
有兩種例外,一類是我們無能為力的,另一類是我們可以做的。 對(duì)于第二類,正確處理異常非常重要,因?yàn)槲覀儾幌Ma因異常而終止。
當(dāng)我們的代碼以意外的方式運(yùn)行時(shí),就會(huì)發(fā)生異常(這就是為什么可以將異常視為一種錯(cuò)誤)。 這些意外的方法可能是將數(shù)字除以零,嘗試以不存在的索引訪問數(shù)組或試圖訪問不存在的對(duì)象。 所有這些方式都會(huì)導(dǎo)致產(chǎn)生異常代碼,這些代碼不遵循正常路徑或處理程序設(shè)計(jì)。
發(fā)生異常時(shí),將向用戶報(bào)告說明,以解釋引起異常代碼的原因。 報(bào)告此異常的行為稱為引發(fā)異常。
異常處理是Java不可或缺的一部分。 每個(gè)Java開發(fā)人員都需要了解如何處理異常,以便他們可以編寫干凈,優(yōu)美的代碼 。
拋出異常
一輛使用劣質(zhì)燃油的汽車會(huì)散發(fā)出煙,以便我們知道出了點(diǎn)問題– Java程序中引發(fā)的異常等效于該煙。 當(dāng)Java程序中發(fā)生異常時(shí),需要將異常報(bào)告給系統(tǒng)用戶,以便用戶確切了解出了什么問題。 通過向用戶報(bào)告此異常,我們引發(fā)了異常。
程序員可以導(dǎo)致引發(fā)異常,或者Java語言引發(fā)異常。 當(dāng)程序的用戶執(zhí)行某些已明確啟動(dòng)為程序中的非法或錯(cuò)誤操作時(shí),程序員可能引發(fā)異常。 同樣,如果程序的輸入違反了一些基本的算術(shù)或編程原理(例如,將數(shù)字除以零),并且程序運(yùn)行的環(huán)境出現(xiàn)了內(nèi)存不足等問題,則Java語言可能會(huì)引發(fā)一些異常。
因此,當(dāng)Java程序引發(fā)異常時(shí),會(huì)發(fā)生什么? 創(chuàng)建任何Throwable子類的對(duì)象,該對(duì)象根據(jù)異常的類型解釋異常的性質(zhì)。 例如,可以引發(fā)ArithmeticException對(duì)象,這表明發(fā)生了算術(shù)錯(cuò)誤。
可以從Java程序引發(fā)的任何異常均被視為Throwable類的對(duì)象,該類分為兩個(gè)子類: Exception類和Error類。
程序員無法處理的異常在Error類中。 您可以修復(fù)的異常在Exception類中。
錯(cuò)誤類別
有些例外就像自然災(zāi)害,它們會(huì)發(fā)生,而您只需要接受它們的發(fā)生即可。 屬于Error類的異常是您無法修復(fù)的事情。 它們也只是發(fā)生,而您必須接受它們的發(fā)生。
Error類異常通常用于表明您的代碼在其中運(yùn)行的環(huán)境有問題。 這些類型的問題可能包括內(nèi)存不足-內(nèi)存不足的情況不是您編寫代碼來處理的事情,因此您不能簡單地對(duì)其進(jìn)行處理。 這些異常只會(huì)終止您的程序。
通過重新啟動(dòng)程序可以修復(fù)錯(cuò)誤類異常,但前提是必須解決導(dǎo)致程序終止的環(huán)境中的問題。 在我們的示例中,對(duì)該錯(cuò)誤的修復(fù)可能包括手動(dòng)恢復(fù)用于執(zhí)行程序的空間。
只是知道Java不能解決Error類的異常。 程序所有者必須在代碼終止后執(zhí)行某些操作,以確保程序可以再次運(yùn)行。
例外類別
在Exception類下發(fā)生時(shí)可以處理的異常。 Java編程語言具有多種異常,可以在子類RuntimeException下進(jìn)行處理。
這些例外包括被零除的例外,當(dāng)您嘗試將數(shù)字除以零時(shí)會(huì)發(fā)生。
之所以能夠處理Exception類的異常,是因?yàn)樗鼈儽硎灸承﹩栴}發(fā)生在代碼內(nèi)部,而不是在運(yùn)行代碼的環(huán)境中。
您可以通過編寫代碼來確保這些異常不會(huì)首先發(fā)生,從而避免此類異常;如果確實(shí)發(fā)生了此類異常,則可以編寫代碼以確保這些異常不會(huì)終止您的程序執(zhí)行。 為了處理異常,將它們放置在try塊中 , 稍后我們將介紹它。
錯(cuò)誤類和異常類之間的基本區(qū)別在于,錯(cuò)誤類將導(dǎo)致程序終止并且無法對(duì)其進(jìn)行處理,但是如果正確處理了異常,則可以使異常類不導(dǎo)致程序終止。
涉及異常的重要關(guān)鍵字
Java中的異常處理可以通過使用一些關(guān)鍵字(例如try,catch,throw,throws和finally)來實(shí)現(xiàn) 。 這些關(guān)鍵字用于管理如何引發(fā)和處理異常。
任何可能導(dǎo)致引發(fā)異常的代碼都寫入try塊中。 可能引發(fā)異常的代碼通常處理輸入值,但不能保證始終是程序員想要的方式。
想象一個(gè)試圖走路的嬰兒。 您只需將手放在嬰兒周圍,以確保嬰兒不會(huì)跌落并受傷。 同樣,try塊用于包圍在運(yùn)行時(shí)可能引發(fā)異常的代碼。
在try塊之后緊接著是catch塊, finally塊或兩者。
catch塊完全按照其名稱的含義執(zhí)行操作:它捕獲try塊中引發(fā)的異常。 由于可以引發(fā)許多異常,因此catch塊必須指定要處理的異常類。
在catch塊之外,還有finally塊,當(dāng)try塊完成時(shí), finally塊才起作用。 因此,finally塊等待try塊執(zhí)行。 請(qǐng)注意,try塊之后可以是catch塊,finally塊或兩者的組合。 如果try塊具有catch塊,則最后在catch后面運(yùn)行,否則,finally塊在try塊之后立即運(yùn)行。
因此,將finally塊想象為try塊的最終手段。 finally塊通常用于處理try塊可能未正確利用的資源。
通過使用方法標(biāo)題中的throws關(guān)鍵字,方法或執(zhí)行Java中特定功能的一段代碼可以引發(fā)一種異常。
Error或RuntimeException及其子類中的異常無需包含在throws語句中。 它們被歸類為“未經(jīng)檢查的異常”,這些異常應(yīng)以任何可能的方式加以阻止,并且不得有意識(shí)地允許其發(fā)生。
程序中可能發(fā)生的未經(jīng)檢查的異常數(shù)量如此之大,以至于我們無法將所有未經(jīng)檢查的異常都扔進(jìn)一個(gè)方法中。 這將導(dǎo)致該方法失去其清晰度,因此Java假定運(yùn)行程序的程序員沒有故意拋出這些類型的異常。
發(fā)生問題時(shí),每種方法都可能引發(fā)未檢查的異常,因此無需在throws語句中添加未檢查的異常。
throw關(guān)鍵字用于專門在方法中引發(fā)異常。 它只是用于動(dòng)詞throw中的正常用法:它拋出Throwable Class的對(duì)象。 您不能拋出不在Throwable類或其任何子類中的對(duì)象。 注意不要使用throw關(guān)鍵字拋出Unchecked Exceptions。 使用throw關(guān)鍵字引發(fā)Checked Exception。
為什么要處理異常?
因?yàn)槲覀兙帉懙拿總€(gè)程序都會(huì)在某一時(shí)刻拋出異常,所以了解如何處理它們很重要,這樣一來,異常不會(huì)總是在程序中每次發(fā)生時(shí)都終止 。
了解屬于錯(cuò)誤類或異常類的異常之間的區(qū)別可以幫助您確定是否可以解決問題。
在編寫用于處理異常的代碼時(shí),請(qǐng)確保您理解并正確使用了try,catch和finally塊,并記住盡力防止拋出未經(jīng)檢查的異常。
學(xué)習(xí)如何在異常發(fā)生之前進(jìn)行處理將有助于您編寫簡潔,優(yōu)雅的代碼。
翻譯自: https://www.javacodegeeks.com/2017/12/handling-exceptions-java.html
java 異常處理發(fā)生異常
總結(jié)
以上是生活随笔為你收集整理的java 异常处理发生异常_处理Java中的异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老司机教您自己组装电脑如何省钱如何组装一
- 下一篇: 台式机电脑怎样在BIOS里设置U盘启动如