這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Java中為什么會(huì)出現(xiàn)Exception結(jié)構(gòu)異常,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)為客戶(hù)提供專(zhuān)業(yè)的成都做網(wǎng)站、網(wǎng)站制作、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開(kāi)發(fā). 服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站程序開(kāi)發(fā)、WEB系統(tǒng)開(kāi)發(fā)、微信二次開(kāi)發(fā)、成都做手機(jī)網(wǎng)站等網(wǎng)站方面業(yè)務(wù)。1. Java異常Exception的結(jié)構(gòu)分析
我們通常所說(shuō)的Exception主要是繼承于Throwable而來(lái),可以參見(jiàn)如下的結(jié)構(gòu)圖示:
主要的Throwable分為異常和錯(cuò)誤兩種,然后異常Exception和錯(cuò)誤Error做為基類(lèi),分別被具體個(gè)性化以及衍生出NullPointerException、EOFException等等異常信息類(lèi)。
基于Java中的源代碼來(lái)分析,Error和Exception僅僅是繼承了Throwable,做了構(gòu)造函數(shù)的拓展,沒(méi)有進(jìn)行額外方法的延展;Exception輸出的主要核心方法都是定義在Throwable中的,感興趣的童鞋可以嘗試閱讀JDK的源代碼。
下面將介紹一下關(guān)鍵的幾個(gè)異常類(lèi)方法:
1、getMessage(): String
輸出異常的描述信息
2、getLocalizedMessage()
輸出本地化的描述信息,一般此方法可被子類(lèi)所覆蓋,缺省實(shí)現(xiàn)與getMessage()輸出信息一致
3、printStackTrace()
將異常棧打印到輸出流中,此為一類(lèi)方法,默認(rèn)打印到console控制臺(tái),也可以顯式指定輸出流。
4、fillInStackTrace()
將當(dāng)前的異常棧保存到一個(gè)Throwable中,返回這個(gè)Throwable。大部分情況下,用在保留異常棧嵌套調(diào)用的情況,嘗試保留完整的異常棧,無(wú)需使用該方法。
2. Error vs Exception
Error在Java體系中定義為不可控制的問(wèn)題,往往用來(lái)描述系統(tǒng)錯(cuò)誤或者底層的問(wèn)題,比如虛擬機(jī)錯(cuò)誤,例如內(nèi)存空間不足,方法調(diào)用棧溢等。我們以上圖中列舉出的內(nèi)存溢出錯(cuò)誤(StackOverflowError)為例,它是在JVM層面發(fā)生的錯(cuò)誤,已經(jīng)游離于java應(yīng)用層之外;在應(yīng)用程序?qū)用媸菬o(wú)法進(jìn)行捕獲,且無(wú)法從錯(cuò)誤中恢復(fù)的。一般一旦發(fā)了類(lèi)似問(wèn)題,一般都是直接宕機(jī),應(yīng)用停止正常的工作,需要重新啟動(dòng)或者修復(fù)問(wèn)題之后,方可重新正常工作。
Exception一般發(fā)生在應(yīng)用層,即在由項(xiàng)目中的Java代碼層面引發(fā)的問(wèn)題,且可以嘗試進(jìn)行捕獲,此類(lèi)問(wèn)題不會(huì)影響到應(yīng)用程序的正常工作的,即不會(huì)導(dǎo)致宕機(jī)現(xiàn)象的發(fā)生。我們?cè)诠ぷ骰蛘叽a中常見(jiàn)的都是Exception衍生出來(lái)的各類(lèi)異常。
這里需要強(qiáng)調(diào)說(shuō)明一下,JVM是Java語(yǔ)言的運(yùn)行環(huán)境和平臺(tái),但是并不是Java語(yǔ)言體系的一個(gè)部分;在JVM平臺(tái)上,還可以運(yùn)行Groovy, JPython, JRuby, Closure,Scala等等遵守Java語(yǔ)言規(guī)范(JavaLanguage Specification)的編程語(yǔ)言,故我們可以將Error理解為脫離Java應(yīng)用之外的問(wèn)題。
3. Exception中的運(yùn)行時(shí)異常(RuntimeException)和受控異常(checked exception)
運(yùn)行時(shí)異常(RuntimeException)是指在運(yùn)行之時(shí)發(fā)生的異常,無(wú)需顯式地進(jìn)行捕獲;如果程序中發(fā)生類(lèi)似的異常,JVM會(huì)直接拋出此類(lèi)異常,并打出響應(yīng)的異常棧信息。此類(lèi)異常也通常被稱(chēng)為unchecked exception, 未受控異常。
受控異常(checked Exception)是我們最常見(jiàn)的異常種類(lèi),在代碼中使用的異?;旧隙际谴祟?lèi)異常,此類(lèi)異常會(huì)在代碼編譯階段由Java編譯器進(jìn)行語(yǔ)法檢查,如果未顯式進(jìn)行異常捕獲,則會(huì)報(bào)出相應(yīng)的編譯異常信息。
4. 如何在代碼中正確打印異常信息
下面我們將通過(guò)一系列的例子來(lái)說(shuō)明上述幾個(gè)Exception中方法的使用技巧。
Case 1: getMessage()/getLocalizedMessage()
public void testCase1() { System.out.println("We are going to do something interesting...."); try { throw new NullPointerException("I am an exception in the code."); } catch (Exception e) { System.out.println("We got unexpected:" + e.getMessage()); System.out.println("We got unexpected:" + e.getLocalizedMessage()); } }
文章標(biāo)題:Java中為什么會(huì)出現(xiàn)Exception結(jié)構(gòu)異常-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://chinadenli.net/article46/djjjeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)、微信小程序、網(wǎng)站改版、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容