Java異常小結(jié)

題目:請(qǐng)聊一下,你對(duì)java異常的理解?區(qū)分一下運(yùn)行時(shí)異常和一般異常有何異同?你在平時(shí)工作中遇到的異常類有哪些,詳細(xì)說(shuō)明一下這些異常是怎么產(chǎn)生的?

1 Java異常的理解?

異常主要處理編譯期不能捕獲的錯(cuò)誤。出現(xiàn)問(wèn)題時(shí)能繼續(xù)順利執(zhí)行下去,而不導(dǎo)致程序終止。確保程序的健壯性。

處理過(guò)程:產(chǎn)生異常狀態(tài)時(shí),如果當(dāng)前的context不具備處理當(dāng)前異常的能力,將在heap上new出來(lái)一個(gè)異常對(duì)象,停止當(dāng)前的執(zhí)行路線,把產(chǎn)生的異常對(duì)象拋給更高層的context。

Throwable:異常類;Error :系統(tǒng)異常;不能恢復(fù);Exception :普通異常;可恢復(fù)。

利用try/catch/finally來(lái)處理異常。

在你會(huì)到了上面的東西,有的面試官會(huì)問(wèn)你什么時(shí)候用到finally呢?你應(yīng)該這樣回答,某些事物(除內(nèi)存外)在異常處理完后需要恢復(fù)到原始狀態(tài),如:開啟的文件,網(wǎng)絡(luò)連接等。

2 運(yùn)行時(shí)異常和一般異常有何異同?

異常分為runtime exception和checked exception。

checked exception:java編譯器強(qiáng)制要求catch此類異常,如io異常、sql異常。

runtime exception:不需要強(qiáng)制性處理,一旦出現(xiàn)異常,交由虛擬機(jī)接管。

3 遇到的異常類有哪些?產(chǎn)生的原因?

NullPointerException:空指針。

ArrayIndexOutOfBoundsException:數(shù)組越界。

IllegalArgumentException:參數(shù)非法。

BufferOverflowException:緩存溢出。

ClassNotFoundException:在編譯時(shí)無(wú)法找到指定的類。

ClassCastException:類型強(qiáng)轉(zhuǎn)。

ExceptionInInitializerError:靜態(tài)初始值或靜態(tài)變量初始值期間發(fā)生異常。

UnsatisfiedLinkError:JNI加載dll或者so文件時(shí)未找到。

NoClassDefFoundError:在編譯時(shí)能找到合適的類,而在運(yùn)行時(shí)不能找到合適的類。

上面說(shuō)了這么多常見的異常類,下面咱們?cè)敿?xì)的聊一下OutOfMemoryError(內(nèi)存溢出)這個(gè)異常。

產(chǎn)生的原因:

  • 內(nèi)存中加載的數(shù)據(jù)量過(guò)于龐大,如一次從數(shù)據(jù)庫(kù)取出過(guò)多數(shù)據(jù)。

  • 集合類中有對(duì)對(duì)象的引用,使用完后未清空,使得JVM不能回收。

  • 代碼中存在死循環(huán)或循環(huán)產(chǎn)生過(guò)多重復(fù)的對(duì)象實(shí)體。

  • 使用的第三方軟件中的BUG。

  • 啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過(guò)小。

重點(diǎn)排查以下幾點(diǎn):

  • 1 檢查代碼中是否有死循環(huán)或遞歸調(diào)用。

  • 2 檢查是否有大循環(huán)重復(fù)產(chǎn)生新對(duì)象實(shí)體。

  • 3 檢查對(duì)數(shù)據(jù)庫(kù)查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。一般來(lái)說(shuō),如果一次取十萬(wàn)條記錄到內(nèi)存,就可能引起內(nèi)存溢出。這個(gè)問(wèn)題比較隱蔽,在上線前,數(shù)據(jù)庫(kù)中數(shù)據(jù)較少,不容易出問(wèn)題,上線后,數(shù)據(jù)庫(kù)中數(shù)據(jù)多了,一次查詢就有可能引起內(nèi)存溢出。因此對(duì)于數(shù)據(jù)庫(kù)查詢盡量采用分頁(yè)的方式查詢。

  • 4 檢查L(zhǎng)ist、MAP等集合對(duì)象是否有使用完后,未清除的問(wèn)題。List、MAP等集合對(duì)象會(huì)始終存有對(duì)對(duì)象的引用,使得這些對(duì)象不能被GC回收。

  • 5 檢查對(duì)大文件的讀取是否采用類nio的方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,900評(píng)論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,901評(píng)論 11 349
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,280評(píng)論 0 62
  • 我要問(wèn),這部電視劇的經(jīng)典橋段有哪些呢?回答肯定很多。有人說(shuō)是爬樹摔死,有人說(shuō)是沉塘未溺,有人說(shuō)是官匪交火,有人說(shuō)是...
    安言靜語(yǔ)閱讀 164評(píng)論 0 0
  • R: I:這段講解了如何介紹自己的興趣愛好,參照事例的片段,可以按照以下步驟進(jìn)行: 這個(gè)興趣是什么? 自己對(duì)這個(gè)興...
    演奏的船長(zhǎng)閱讀 296評(píng)論 0 1

友情鏈接更多精彩內(nèi)容