Java面試題(異常)

74. throw 和 throws 的區(qū)別?

throws是用來聲明一個方法可能拋出的所有異常信息纠修,throws是將異常聲明但是不處理祝拯,而是將異常往上傳,誰調(diào)用我就交給誰處理温算。而throw則是指拋出的一個具體的異常類型怜校。

75. final、finally注竿、finalize 有什么區(qū)別茄茁?

  • final可以修飾類、變量蔓搞、方法胰丁,修飾類表示該類不能被繼承、修飾方法表示該方法不能被重寫喂分、修飾變量表示該變量是一個常量不能被重新賦值锦庸。
  • finally一般作用在try-catch代碼塊中,在處理異常的時候蒲祈,通常我們將一定要執(zhí)行的代碼方法finally代碼塊中甘萧,表示不管是否出現(xiàn)異常,該代碼塊都會執(zhí)行梆掸,一般用來存放一些關(guān)閉資源的代碼扬卷。
  • finalize是一個方法,屬于Object類的一個方法酸钦,而Object類是所有類的父類怪得,該方法一般由垃圾回收器來調(diào)用,當(dāng)我們調(diào)用System的gc()方法的時候卑硫,由垃圾回收器調(diào)用finalize(),回收垃圾徒恋。

76. try-catch-finally 中哪個部分可以省略?

答:catch 可以省略

原因:
  • 更為嚴(yán)格的說法其實(shí)是:try只適合處理運(yùn)行時異常欢伏,try+catch適合處理運(yùn)行時異常+普通異常入挣。也就是說,如果你只用try去處理普通異常卻不加以catch處理硝拧,編譯是通不過的径筏,因?yàn)榫幾g器硬性規(guī)定葛假,普通異常如果選擇捕獲,則必須用catch顯示聲明以便進(jìn)一步處理滋恬。而運(yùn)行時異常在編譯時沒有如此規(guī)定聊训,所以catch可以省略,你加上catch編譯器也覺得無可厚非夷恍。
  • 理論上魔眨,編譯器看任何代碼都不順眼,都覺得可能有潛在的問題酿雪,所以你即使對所有代碼加上try遏暴,代碼在運(yùn)行期時也只不過是在正常運(yùn)行的基礎(chǔ)上加一層皮。但是你一旦對一段代碼加上try指黎,就等于顯示地承諾編譯器朋凉,對這段代碼可能拋出的異常進(jìn)行捕獲而非向上拋出處理。如果是普通異常醋安,編譯器要求必須用catch捕獲以便進(jìn)一步處理杂彭;如果運(yùn)行時異常,捕獲然后丟棄并且+finally掃尾處理吓揪,或者加上catch捕獲以便進(jìn)一步處理亲怠。
  • 至于加上finally,則是在不管有沒捕獲異常柠辞,都要進(jìn)行的“掃尾”處理团秽。

77. try-catch-finally 中,如果 catch 中 return 了叭首,finally 還會執(zhí)行嗎习勤?

答:會執(zhí)行,在 return 前執(zhí)行焙格。
代碼示例1:

/*
 * java面試題--如果catch里面有return語句图毕,finally里面的代碼還會執(zhí)行嗎?
 */
public class FinallyDemo2 {
    public static void main(String[] args) {
        System.out.println(getInt());
    }

    public static int getInt() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;
            /*
             * return a 在程序執(zhí)行到這一步的時候眷唉,這里不是return a 而是 return 30予颤;這個返回路徑就形成了
             * 但是呢,它發(fā)現(xiàn)后面還有finally冬阳,所以繼續(xù)執(zhí)行finally的內(nèi)容蛤虐,a=40
             * 再次回到以前的路徑,繼續(xù)走return 30,形成返回路徑之后摩泪,這里的a就不是a變量了,而是常量30
             */
        } finally {
            a = 40;
        }

//      return a;
    }
}

執(zhí)行結(jié)果:30

代碼示例2:

package com.java_02;

/*
 * java面試題--如果catch里面有return語句劫谅,finally里面的代碼還會執(zhí)行嗎见坑?
 */
public class FinallyDemo2 {
    public static void main(String[] args) {
        System.out.println(getInt());
    }

    public static int getInt() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;
            /*
             * return a 在程序執(zhí)行到這一步的時候嚷掠,這里不是return a 而是 return 30;這個返回路徑就形成了
             * 但是呢荞驴,它發(fā)現(xiàn)后面還有finally不皆,所以繼續(xù)執(zhí)行finally的內(nèi)容,a=40
             * 再次回到以前的路徑,繼續(xù)走return 30熊楼,形成返回路徑之后霹娄,這里的a就不是a變量了,而是常量30
             */
        } finally {
            a = 40;
            return a; //如果這樣鲫骗,就又重新形成了一條返回路徑犬耻,由于只能通過1個return返回,所以這里直接返回40
        }

//      return a;
    }
}

執(zhí)行結(jié)果:40

78. 常見的異常類有哪些执泰?

  • NullPointerException:當(dāng)應(yīng)用程序試圖訪問空對象時枕磁,則拋出該異常。
  • SQLException:提供關(guān)于數(shù)據(jù)庫訪問錯誤或其他錯誤信息的異常术吝。
  • IndexOutOfBoundsException:指示某排序索引(例如對數(shù)組计济、字符串或向量的排序)超出范圍時拋出。
  • NumberFormatException:當(dāng)應(yīng)用程序試圖將字符串轉(zhuǎn)換成一種數(shù)值類型排苍,但該字符串不能轉(zhuǎn)換為適當(dāng)格式時沦寂,拋出該異常。
  • FileNotFoundException:當(dāng)試圖打開指定路徑名表示的文件失敗時淘衙,拋出此異常传藏。
  • IOException:當(dāng)發(fā)生某種I/O異常時,拋出此異常幔翰。此類是失敗或中斷的I/O操作生成的異常的通用類漩氨。
  • ClassCastException:當(dāng)試圖將對象強(qiáng)制轉(zhuǎn)換為不是實(shí)例的子類時,拋出該異常遗增。
  • ArrayStoreException:試圖將錯誤類型的對象存儲到一個對象數(shù)組時拋出的異常叫惊。
  • IllegalArgumentException:拋出的異常表明向方法傳遞了一個不合法或不正確的參數(shù)。
  • ArithmeticException:當(dāng)出現(xiàn)異常的運(yùn)算條件時做修,拋出此異常霍狰。例如,一個整數(shù)“除以零”時饰及,拋出此類的一個實(shí)例蔗坯。
  • NegativeArraySizeException:如果應(yīng)用程序試圖創(chuàng)建大小為負(fù)的數(shù)組,則拋出該異常燎含。
  • NoSuchMethodException:無法找到某一特定方法時宾濒,拋出該異常。
  • SecurityException:由安全管理器拋出的異常屏箍,指示存在安全侵犯绘梦。
  • UnsupportedOperationException:當(dāng)不支持請求的操作時橘忱,拋出該異常。
  • RuntimeExceptionRuntimeException:是那些可能在Java虛擬機(jī)正常運(yùn)行期間拋出的異常的超類卸奉。

目錄:2020最新Java面試題及答案匯總(上)
目錄:2020最新Java面試題及答案匯總(下)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钝诚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榄棵,更是在濱河造成了極大的恐慌凝颇,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疹鳄,死亡現(xiàn)場離奇詭異拧略,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尚辑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門辑鲤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杠茬,你說我怎么就攤上這事月褥。” “怎么了瓢喉?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵宁赤,是天一觀的道長。 經(jīng)常有香客問我栓票,道長决左,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任走贪,我火速辦了婚禮佛猛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坠狡。我一直安慰自己继找,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布逃沿。 她就那樣靜靜地躺著婴渡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凯亮。 梳的紋絲不亂的頭發(fā)上边臼,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音假消,去河邊找鬼柠并。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的臼予。 我是一名探鬼主播亿傅,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘟栖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谅阿,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤半哟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后签餐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寓涨,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年氯檐,在試婚紗的時候發(fā)現(xiàn)自己被綠了戒良。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡冠摄,死狀恐怖糯崎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情河泳,我是刑警寧澤沃呢,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站拆挥,受9級特大地震影響薄霜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纸兔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一惰瓜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汉矿,春花似錦崎坊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呻待,卻和暖如春打月,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚕捉。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工奏篙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓秘通,卻偏偏與公主長得像为严,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肺稀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348