最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java面試-異常

2022-04-19 22:27 作者:吾之利劍  | 我要投稿

1、Error與Exception區(qū)別(Java中異常分為哪兩種)?*

????Error和Exception都是java錯(cuò)誤處理機(jī)制的一部分,都繼承了Throwable類。 Error表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指望程序能處理這樣的情況。 ? Exception表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況。

????Exception下有兩個(gè)分支: Exception直接子類,RuntimeException

????Exception的直接子類:編譯時(shí)異常(要求程序員在編寫程序階段必須預(yù)先對(duì)這些異常進(jìn)行處理,不處理,編譯不通過(guò)) 編譯時(shí)異常也被稱為:受檢異常(CheckedException)、受控異常。

????RuntimeException:運(yùn)行時(shí)異常(在編寫程序階段程序員可以處理,也可以不處理)。 運(yùn)行時(shí)異常也被稱為:未受檢異常(UnCheckedException)、非受控異常。

2、異常的處理機(jī)制有幾種?*

????異常捕捉:try…catch…finally,異常拋出:throws。

3、Java中的異常處理關(guān)鍵字是什么?

????throw:有時(shí)我們明確要?jiǎng)?chuàng)建異常對(duì)象然后拋出它來(lái)停止程序的正常處理。throw關(guān)鍵字用于向運(yùn)行時(shí)拋出異常來(lái)處理它。

????throws:當(dāng)我們?cè)诜椒ㄖ袙伋鋈魏我褭z查的異常而不處理它時(shí),我們需要在方法簽名中使用 throws關(guān)鍵字讓調(diào)用者程序知道該方法可能拋出的異常。調(diào)用方法可以處理這些異?;蚴褂胻hrows關(guān)鍵字將其傳播給它的調(diào)用方法。我們可以在throws子句中提供多個(gè)異常,也可以與main()方法一起使用。

????try-catch:我們?cè)诖a中使用try-catch塊進(jìn)行異常處理。try是塊的開(kāi)始,catch是在try塊的末尾處理異常。我們可以使用try有多個(gè)catch塊,try-catch塊也可以嵌套。catch塊需要一個(gè)應(yīng)該是Exception類型的參數(shù)。

????finally: finally塊是可選的,只能用于try-catch塊。由于異常會(huì)暫停執(zhí)行過(guò)程,因此我們可能會(huì)打開(kāi)一些不會(huì)關(guān)閉的資源,因此我們可以使用finally塊。finally塊總是被執(zhí)行,無(wú)論是否發(fā)生異常。

4、final, finally, finalize的區(qū)別?*

????final用于聲明屬性,方法和類,分別表示屬性不可交變,方法不可覆蓋,類不可繼承。 ???

?? ?finally是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。

????finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等(在垃圾回收的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法)

5、try catch finally,try里有return,finally還執(zhí)行么?

????執(zhí)行,并且finally的執(zhí)行早于try里面的return結(jié)論:

????1、不管有沒(méi)有出現(xiàn)異常,finally塊中代碼都會(huì)執(zhí)行;

????2、當(dāng)try和catch中有return時(shí),finally仍然會(huì)執(zhí)行;

????3、finally是在return后面的表達(dá)式運(yùn)算后執(zhí)行的(此時(shí)并沒(méi)有返回運(yùn)算后的值,而是先把要返回的值保存起來(lái),管finally中的代碼怎么樣,返回的值都不會(huì)改變,任然是之前保存的值),所以函數(shù)返回值是在finally執(zhí)行前確定的;

????4、finally中最好不要包含return,否則程序會(huì)提前退出,返回值不是try或catch中保存的返回值。

????注意多個(gè)catch 的時(shí)候,一定要把異常范圍小的放在前面,范圍大的放在后面,Exception這個(gè)異常的根類一定要?jiǎng)傇谧詈笠粋€(gè)catch里面,如果放在前面或者中間,任何異常都會(huì)和Exception匹配的,就會(huì)報(bào)已捕獲到...異常的錯(cuò)誤。

6、什么情況finally不會(huì)執(zhí)行

一共有三種

????1、不進(jìn)入try塊

? ? ? ?try語(yǔ)句沒(méi)有被執(zhí)行到,如在try語(yǔ)句之前就返回了,這樣finally語(yǔ)句就不會(huì)執(zhí)行;

????2、程序中止

????????在try塊中有System.exit(0);這樣的語(yǔ)句,System.exit(0);是終止Java虛擬機(jī)JVM的,連JVM都停止了,所有都結(jié)束了,當(dāng)然finally語(yǔ)句也不會(huì)被執(zhí)行到。

????3、線程中止

? ? java線程分為兩類,守護(hù)線程和非守護(hù)線程。當(dāng)所有的非守護(hù)線程中止時(shí),不論存不存在守護(hù)線程,虛擬機(jī)都會(huì)kill掉守護(hù)線程從而中止程序。 虛擬機(jī)中,執(zhí)行main方法的線程就是一個(gè)非守護(hù)線程,垃圾回收則是另一個(gè)守護(hù)線程,main執(zhí)行完,程序就中止了,而不管垃圾回收線程是否中止。 所以,如果守護(hù)線程中存在finally代碼塊,那么當(dāng)所有的非守護(hù)線程中止時(shí),守護(hù)線程被kill掉,其finally代碼塊是不會(huì)執(zhí)行的。

7、thorw與thorws區(qū)別

位置不同

????throws 用在函數(shù)上,后面跟的是異常類,可以跟多個(gè);而 throw 用在函數(shù)內(nèi),后面跟的是異常對(duì)象。

功能不同

????throws 用來(lái)聲明異常,讓調(diào)用者只知道該功能可能出現(xiàn)的問(wèn)題,可以給出預(yù)先的處理方式;throw 拋出具體的問(wèn)題對(duì)象,執(zhí)行到 throw,功能就已經(jīng)結(jié)束了,跳轉(zhuǎn)到調(diào)用者,并將具體的問(wèn)題對(duì)象拋給調(diào)用者。也就是說(shuō) throw 語(yǔ)句獨(dú)立存在時(shí),下面不要定義其他語(yǔ)句,因?yàn)閳?zhí)行不到。

????throws 表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常;throw 則是拋出了異常,執(zhí)行 throw 則一定拋出了某種異常對(duì)象。

????兩者都是消極處理異常的方式,只是拋出或者可能拋出異常,但是不會(huì)由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調(diào)用處理。


8、NoClassDefFoundError 和 ClassNotFoundException 區(qū)別?*

????NoClassDefFoundError 是一個(gè) Error 類型的異常,是由 JVM 引起的,不應(yīng)該嘗試捕獲這個(gè)異常。

????引起該異常的原因是 JVM 或 ClassLoader 嘗試加載某類時(shí)在內(nèi)存中找不到該類的定義,該動(dòng)作發(fā)生在運(yùn)行期間,即編譯時(shí)該類存在,但是在運(yùn)行時(shí)卻找不到了,可能是變異后被刪除了等原因?qū)е拢?/span>

????ClassNotFoundException 是一個(gè)受查異常,需要顯式地使用 try-catch 對(duì)其進(jìn)行捕獲和處理,或在方法簽名中用 throws 關(guān)鍵字進(jìn)行聲明。當(dāng)使用 Class.forName, ?ClassLoader.loadClass或 ClassLoader.findSystemClass 動(dòng)態(tài)加載類到內(nèi)存的時(shí)候,通過(guò)傳入的類路徑參數(shù)沒(méi)有找到該類,就會(huì)拋出該異常;另一種拋出該異常的可能原因是某個(gè)類已經(jīng)由一個(gè)類加載器加載至內(nèi)存中,另一個(gè)加載器又嘗試去加載它。

9、在catch捕獲異常時(shí),為什么不考慮使用Throwable類型,而只是使用Exception來(lái)進(jìn)行接收?*

????Throwable表示的范圍要比Exception大。實(shí)際上程序使用Throwable來(lái)進(jìn)行處理,沒(méi)有任何語(yǔ)法問(wèn)題,但是卻會(huì)存在邏輯問(wèn)題。

????因?yàn)榇藭r(shí)出現(xiàn)的(或者說(shuō)用戶能夠處理的)只有Exception類型,而如果使用Throwable接收,還會(huì)表示可以處理Error的錯(cuò)誤,而用戶是處理不了Error錯(cuò)誤的,所以在開(kāi)發(fā)中用戶可以處理的異常都要求以Exception類為主。

10、列出常見(jiàn)的幾種RunException? *

準(zhǔn)備幾個(gè)常見(jiàn)的,最好再準(zhǔn)備一下對(duì)應(yīng)的解決方法;

NullPointerException - 空指針引用異常 ClassCastException - 類型強(qiáng)制轉(zhuǎn)換異常 IllegalArgumentException - 傳遞非法參數(shù)異常 ArithmeticException - 算術(shù)運(yùn)算異常 ArrayStoreException - 向數(shù)組中存放與聲明類型不兼容對(duì)象異常 IndexOutOfBoundsException - 下標(biāo)越界異常

NegativeArraySizeException - 創(chuàng)建一個(gè)大小為負(fù)數(shù)的數(shù)組錯(cuò)誤異常

NumberFormatException - 數(shù)字格式異常

NegativeArrayException - 數(shù)組負(fù)下標(biāo)異常

EOFException - 文件已結(jié)束異常

FileNotFoundException - 文件未找到異常

SQLException - 操作數(shù)據(jù)庫(kù)異常

IOException - 輸入輸出異常

NoSuchMethodException - 方法未找到異常

java.lang.AbstractMethodError - 抽象方法錯(cuò)誤。當(dāng)應(yīng)用試圖調(diào)用抽象方法時(shí)拋出。 java.lang.AssertionError - 斷言錯(cuò)。用來(lái)指示一個(gè)斷言失敗的錯(cuò)誤。 java.lang.ClassCircularityError - 類循環(huán)依賴錯(cuò)誤。在初始化一個(gè)類時(shí),若檢測(cè)到類之間循環(huán)依賴則拋出該異常。

java.lang.ClassFormatError - 類格式錯(cuò)誤。當(dāng)Java虛擬機(jī)試圖從一個(gè)文件中讀取Java類,而檢測(cè)到該文件的內(nèi)容不符合類的有效格式時(shí)輸出。

java.lang.Error - 錯(cuò)誤。是所有錯(cuò)誤的基類,用于標(biāo)識(shí)嚴(yán)重的程序運(yùn)行問(wèn)題。這些問(wèn)題通常描述一些不應(yīng)被應(yīng)用程序捕獲的反常情況。

11、擴(kuò)展

? 1、在項(xiàng)目中遇到哪些問(wèn)題,怎么解決?

一般解決思路,先找日志,通過(guò)日志來(lái)確定位置,然后debug模式去問(wèn)題重現(xiàn)。

? 2、項(xiàng)目中一般怎么處理異常,有統(tǒng)一處理異常嗎,具體解決方案有哪些?


以上內(nèi)容僅供參考,請(qǐng)合理利用搜索引擎!



Java面試-異常的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
当涂县| 遂溪县| 鹰潭市| 农安县| 平陆县| 星子县| 文成县| 永州市| 广汉市| 新营市| 土默特左旗| 淳化县| 司法| 陈巴尔虎旗| 信宜市| 灵丘县| 白水县| 永靖县| 探索| 巍山| 尖扎县| 庆城县| 安顺市| 渝北区| 吉首市| 青州市| 长垣县| 钟祥市| 西平县| 石狮市| 东台市| 北辰区| 正宁县| 衡阳县| 长汀县| 塘沽区| 南涧| 华阴市| 天峨县| 如皋市| 白河县|