首頁 >Java >Java面試題 >2020全新Java面試題——異常

2020全新Java面試題——異常

王林
王林轉載
2020-06-17 17:12:272909瀏覽

2020全新Java面試題——異常

1、throw 和 throws 的差別?

throws是用來聲明一個方法可能拋出的所有異常信息,throws是將異常聲明但是不處理,而是將異常往上傳,誰調用我就交給誰處理。而throw則是指拋出的一個具體的異常類型。

2、final、finally、finalize 有什麼差別?

final可以修飾類別、變數、方法,修飾類別表示該類別不能被繼承、修飾方法表示該方法不能被重寫、修飾變數表示該變數是一個常數不能被重新賦值。

finally一般作用在try-catch程式碼區塊中,在處理異常的時候,通常我們將一定要執行的程式碼方法finally程式碼區塊中,表示不管是否出現異常,該程式碼區塊都會執行,一般用來存放一些關閉資源的程式碼。

(影片教學推薦:java影片教學

finalize是一個方法,屬於Object類別的一個方法,而Object類別是所有類別的父類,該方法一般由垃圾回收器來調用,當我們調用System的gc()方法的時候,由垃圾回收器調用finalize(),回收垃圾。 

3、try-catch-finally 中哪個部分可以省略?

答案:catch 可以省略

原因:

更嚴格的說法其實是:try只適合處理執行時期例外,try catch適合處理執行時異常普通異常。也就是說,如果你只用try去處理普通異常卻不加以catch處理,編譯是通不過的,因為編譯器硬性規定,普通異常如果選擇捕獲,則必須用catch顯示聲明以便進一步處理。而執行時異常在編譯時沒有如此規定,所以catch可以省略,你加上catch編譯器也覺得無可厚非。

理論上,編譯器看任何程式碼都不順眼,都覺得可能有潛在的問題,所以你即使對所有程式碼加上try,程式碼在執行期間也只不過是正常運作的基礎上加一層皮。但你一旦對一段程式碼加上try,就等於顯示地承諾編譯器,對這段程式碼可能拋出的異常進行捕獲而非向上拋出處理。如果是普通異常,編譯器要求必須用catch捕獲以便進一步處理;如果運行時異常,捕獲然後丟棄並且 finally掃尾處理,或者加上catch捕獲以便進一步處理。

至於加上finally,則是在不管有沒捕獲異常,都要進行的「掃尾」處理。

(相關教學推薦:java入門程式

4、try-catch-finally 中,如果catch 中return 了,finally 還會執行嗎?

答:會執行,在 return 前執行。

程式碼範例1:

 
/*
 * java面试题--如果catch里面有return语句,finally里面的代码还会执行吗?
 */
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 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了
             * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
             * 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30
             */
        } finally {
            a = 40;
        }
 
//      return a;
    }
}

執行結果:30

程式碼範例2:

 
package com.java_02;
 
/*
 * java面试题--如果catch里面有return语句,finally里面的代码还会执行吗?
 */
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 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了
             * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
             * 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30
             */
        } finally {
            a = 40;
            return a; //如果这样,就又重新形成了一条返回路径,由于只能通过1个return返回,所以这里直接返回40
        }
 
//      return a;
    }
}

執行結果:40

5.常見的異常類別有哪些?

  • NullPointerException:當應用程式試圖存取空物件時,則拋出該例外狀況。

  • SQLException:提供關於資料庫存取錯誤或其他錯誤訊息的例外。

  • IndexOutOfBoundsException:指示某排序索引(例如對陣列、字串或向量的排序)超出範圍時拋出。 

  • NumberFormatException:當應用程式試圖將字串轉換成一種數值類型,但字串無法轉換為適當格式時,拋出該異常。

  • FileNotFoundException:當試圖開啟指定路徑名稱表示的檔案失敗時,請拋出此例外。

  • IOException:當發生某種I/O例外時,拋出此例外。此類是失敗或中斷的I/O操作所產生的異常的通用類別。

  • ClassCastException:當試圖將物件強制轉換為不是實例的子類別時,請拋出該例外。

  • ArrayStoreException:試圖將錯誤類型的物件儲存到一個物件陣列時拋出的例外。

  • IllegalArgumentException:拋出的例外表示向方法傳遞了一個不合法或不正確的參數。

  • ArithmeticException:當出現例外的運算條件時,拋出此例外。例如,一個整數「除以零」時,拋出此類的一個實例。 

  • NegativeArraySizeException:如果應用程式試圖建立大小為負的數組,則拋出該例外。

  • NoSuchMethodException:無法找到某一特定方法時,拋出該例外。

  • SecurityException:由安全管理器拋出的例外狀況,指示有安全性侵犯。

  • UnsupportedOperationException:當不支援請求的操作時,拋出該例外。

  • RuntimeExceptionRuntimeException:是那些可能在Java虛擬機器正常運作期間拋出的例外狀況的超類別。

如果您想了解更多面試題內容,請造訪java面試題

以上是2020全新Java面試題——異常的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除