日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

mfc try catch 捕获并显示_“全栈2019”Java异常第十七章:Error该不该被捕获?

發(fā)布時間:2023/12/9 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mfc try catch 捕获并显示_“全栈2019”Java异常第十七章:Error该不该被捕获? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

難度

初級

學(xué)習(xí)時間

30分鐘

適合人群

零基礎(chǔ)

開發(fā)語言

Java

開發(fā)環(huán)境

  • JDK v11
  • IntelliJ IDEA v2018.3

友情提示

  • 本教學(xué)屬于系列教學(xué),內(nèi)容具有連貫性,本章使用到的內(nèi)容之前教學(xué)中都有詳細(xì)講解。
  • 本章內(nèi)容針對零基礎(chǔ)或基礎(chǔ)較差的同學(xué)比較友好,可能對于有基礎(chǔ)的同學(xué)來說很簡單,希望大家可以根據(jù)自己的實際情況選擇繼續(xù)看完或等待看下一篇文章。謝謝大家的諒解!

1.異常體系

在Java異常這個大家族中,Throwable是這個異常家族中的老大,它下面有兩個靠譜老弟,一個叫“Error”,一個叫“Exception”。Error老弟負(fù)責(zé)錯誤部門,Exception老弟負(fù)責(zé)異常部門,它們各司其職。我給它們做了一個結(jié)構(gòu)圖:

Throwable在上一章《“全棧2019”Java異常第十六章:Throwable詳解》中已經(jīng)介紹過了,而Exception我們已經(jīng)不陌生了,前面文章都和Exception有關(guān),Error我們比較陌生一點,這一章章我們就著重講解它。

2.已檢查的異常

在上一章中,我們知道出于編譯時檢查異常的目的,Throwable和Throwable的任何子類(除Error和RuntimeException的子類)都被視為已檢查的異常

Error不是已檢查的異常,那Error是什么呢?

Error是錯誤。

在Java異常體系中有三種異常:

第一種異常是已檢查的異常。

第二種異常是錯誤。

第三種異常是運行時異常。

已檢查的異常在上一章已經(jīng)聊過了,現(xiàn)在我們來聊聊錯誤。運行時異常放在Exception的下一章講解。

3.錯誤

Error是Throwable的子類,表示合理的應(yīng)用程序不應(yīng)該嘗試捕獲的嚴(yán)重問題。當(dāng)錯誤發(fā)生時,這些錯誤應(yīng)該是無法預(yù)測或恢復(fù)的(try-catch或throws)。

當(dāng)我們遇到Error時,我們不應(yīng)該去使用try-catch捕獲它,也不應(yīng)該throws將錯誤拋出去。

那該如何是好?

我們應(yīng)該手動排查錯誤出現(xiàn)的原因及位置,然后把它解決在程序運行之前。

這里有一點非常重要,“當(dāng)我們遇到Error時,我們不應(yīng)該去使用try-catch捕獲它,也不應(yīng)該throws將錯誤拋出去。”說的都是不應(yīng)該,不是說不能。我們還是可以使用try-catch或throws,只是不應(yīng)該這樣去做。

通俗來講就是,異常就像電腦打開某個軟件,然后軟件因為某個操作而崩潰了,這時你可以再重新打開一次軟件,這就相當(dāng)于捕獲異常的操作修復(fù)好這個問題了;而錯誤就不一樣,錯誤就像你電腦冒煙了,這時你肯定是修不好了,也就相當(dāng)于你無法捕獲這個錯誤去修復(fù)它。當(dāng)然了,有小伙伴說電腦冒煙我能不能修復(fù)的試試?當(dāng)然可以,這就和我們程序中遇到Error時,可以使用try-catch或者thorws,但是不建議你這么做。

我們來結(jié)合例子看看。

演示:

請拋出一個錯誤。

請觀察程序代碼及結(jié)果。

代碼:

Main類:

結(jié)果:

從運行結(jié)果來看,Error不是不能被try-catch的,而且不光可以try-catch程序還被修復(fù)好了,從運行結(jié)果我們就可以看出來:

那么我們程序本身做了什么呢?

首先,我們拋出一個Error對象,用來模擬制造一個錯誤:

緊接著,我們對其進(jìn)行try-catch處理:

在catch中我們打印Error的堆棧跟蹤信息:

在try-catch的下面我們輸出了一段話,這行代碼的作用只有一個,那就是驗證我們的錯誤是被成功修復(fù)的:

程序執(zhí)行結(jié)果也符合預(yù)期:

可能小伙伴們說,這例子也太技術(shù)含量了吧,是不是有點太敷衍我們了?

這個例子僅僅只是演示Error可以被try-catch,下面我們來一個實際開發(fā)中的案例,而且這個錯誤是日常開發(fā)中偶爾會碰到的。

4.內(nèi)存溢出OutOfMemoryError

OutOfMemoryError對于大多數(shù)零基礎(chǔ)的同學(xué)來說,可能比較陌生,但是對于稍微有些開發(fā)經(jīng)驗的同學(xué)來說,也算是打過幾次照面的。

OutOfMemoryError是什么?

OutOfMemoryError是內(nèi)存溢出錯誤。

OutOfMemoryError什么時候會發(fā)生?

OutOfMemoryError在JVM(Java虛擬機)內(nèi)存不足的情況下會發(fā)生。

大家還記得我們在講解《“全棧2019”Java異常第十三章:訪問異常堆棧跟蹤信息》一章中講到的JVM內(nèi)存圖嗎?里面我們講到JVM會去申請一塊內(nèi)存空間,這塊內(nèi)存空間專門是用來存放Java應(yīng)用數(shù)據(jù)的(比如基本數(shù)據(jù)類型、數(shù)組、對象...等等)。當(dāng)這塊內(nèi)存空間不足的時候,就會發(fā)生OutOfMemoryError異常。

來個例子演示一下。

演示:

請制造一個OutOfMemoryError異常。

請觀察程序代碼及結(jié)果。

代碼:

Main類:

結(jié)果:

從運行結(jié)果來看,我們程序的確是發(fā)生了OutOfMemoryError異常。接下來,我們看看它是怎么發(fā)生的。

程序代碼真的是好簡單,就一行:

我們創(chuàng)建了一個int類型的數(shù)組,只不過就是數(shù)組長度有點大,1024 * 1024 * 1024個長度。

為什么這一行代碼會產(chǎn)生OutOfMemoryError異常,讓JVM內(nèi)存溢出?

因為我們在創(chuàng)建數(shù)組的時候,實際上就是在申請一塊內(nèi)存空間用,這個內(nèi)存空間就是數(shù)組的地盤,而且數(shù)組在申請內(nèi)存空間的時候,還會按照數(shù)據(jù)類型的大小來預(yù)支實際內(nèi)存大小,我們知道一個int占4個字節(jié),我們申請了1024 * 1024 * 1024個int這么多的4個字節(jié),可想而知內(nèi)存申請有多大,所以創(chuàng)建一個長度超出JVM內(nèi)存大小的數(shù)組時,就會產(chǎn)生OutOfMemoryError異常。

有的小伙伴的JVM內(nèi)存可能有足夠大,所以當(dāng)他運行和我一摸一摸的程序時,程序并沒有崩潰,那么請這樣的小伙伴再在數(shù)組長度的后面乘以1024。

為什么是1024?

因為1024在程序計算中容易換算,比如1KB=1024B(B:字節(jié))。

像OutOfMemoryError我們就必要去捕獲它了,真發(fā)生了OutOfMemoryError程序就只能是崩潰之后重新運行。

為什么沒必要?

我們不知道它會什么時候出現(xiàn),實際開發(fā)不像我們上面這樣去寫一個長度超出JVM內(nèi)存大小的數(shù)組,內(nèi)存的申請發(fā)生在每一行代碼身上,我不知道哪一行代碼運行時會造成OutOfMemoryError。

雖說沒必要,但是我們有沒有什么應(yīng)對的措施?

有,實際開發(fā)中我們碰到OutOfMemoryError的時候就會去分析我們的程序代碼,找出那個產(chǎn)生OutOfMemoryError的源頭,修正程序。

總結(jié)

  • Error是錯誤。它是Java異常體系中的一種。
  • Error是Throwable的子類,表示合理的應(yīng)用程序不應(yīng)該嘗試捕獲的嚴(yán)重問題。
  • 當(dāng)我們遇到Error時,我們不應(yīng)該去使用try-catch捕獲它,也不應(yīng)該throws將錯誤拋出去。
  • OutOfMemoryError是內(nèi)存溢出錯誤。
  • 實際開發(fā)中我們碰到OutOfMemoryError的時候就會去分析我們的程序代碼,找出那個產(chǎn)生OutOfMemoryError的源頭,修正程序。

至此,Java中Error相關(guān)內(nèi)容講解先告一段落,更多內(nèi)容請持續(xù)關(guān)注。

答疑

如果大家有問題或想了解更多前沿技術(shù),請在下方留言或評論,我會為大家解答。

上一章

“全棧2019”Java異常第十六章:Throwable詳解

下一章

“全棧2019”Java異常第十八章:Exception詳解

學(xué)習(xí)小組

加入同步學(xué)習(xí)小組,共同交流與進(jìn)步。

  • 方式一:關(guān)注頭條號Gorhaf,私信“Java學(xué)習(xí)小組”。
  • 方式二:關(guān)注公眾號Gorhaf,回復(fù)“Java學(xué)習(xí)小組”。

全棧工程師學(xué)習(xí)計劃

關(guān)注我們,加入“全棧工程師學(xué)習(xí)計劃”。

版權(quán)聲明

原創(chuàng)不易,未經(jīng)允許不得轉(zhuǎn)載!

總結(jié)

以上是生活随笔為你收集整理的mfc try catch 捕获并显示_“全栈2019”Java异常第十七章:Error该不该被捕获?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。