面試-異常

74. throw 和 throws 的區別?
75. final、finally、finalize 有什麼區別?
76. try-catch-finally 中哪一個部分能夠省略?
77. try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎?
78. 常見的異常類有哪些?

異常java

74. throw 和 throws 的區別?數據庫

throw:數組

  1. 表示方法內拋出某種異常對象
  2. 若是異常對象是非 RuntimeException 則須要在方法申明時加上該異常的拋出 即須要加上 throws 語句 或者 在方法體內 try catch 處理該異常,不然編譯報錯
  3. 執行到 throw 語句則後面的語句塊再也不執行
     

throws:安全

  1. 方法的定義上使用 throws 表示這個方法可能拋出某種異常
  2. 須要由方法的調用者進行異常處理

75. final、finally、finalize 有什麼區別?指針

  • final能夠修飾類、變量、方法,修飾類表示該類不能被繼承、修飾方法表示該方法不能被重寫、修飾變量表示該變量是一個常量不能被從新賦值。
  • finally通常做用在try-catch代碼塊中,在處理異常的時候,一般咱們將必定要執行的代碼方法finally代碼塊中,表示無論是否出現異常,該代碼塊都會執行,通常用來存放一些關閉資源的代碼。
  • finalize是一個方法,屬於Object類的一個方法,而Object類是全部類的父類,該方法通常由垃圾回收器來調用,當咱們調用System的gc()方法的時候,由垃圾回收器調用finalize(),回收垃圾。 

76. try-catch-finally 中哪一個部分能夠省略?code

答:catch 能夠省略orm

緣由:對象

更爲嚴格的說法實際上是:try只適合處理運行時異常try+catch適合處理運行時異常+普通異常。也就是說,若是你只用try去處理普通異常卻不加以catch處理,編譯是通不過的,由於編譯器硬性規定,普通異常若是選擇捕獲,則必須用catch顯示聲明以便進一步處理。而運行時異常在編譯時沒有如此規定,因此catch能夠省略,你加上catch編譯器也以爲無可厚非。排序

理論上,編譯器看任何代碼都不順眼,都以爲可能有潛在的問題,因此你即便對全部代碼加上try,代碼在運行期時也只不過是在正常運行的基礎上加一層皮。可是你一旦對一段代碼加上try,就等於顯示地承諾編譯器,對這段代碼可能拋出的異常進行捕獲而非向上拋出處理。若是是普通異常,編譯器要求必須用catch捕獲以便進一步處理;若是運行時異常,捕獲而後丟棄而且+finally掃尾處理,或者加上catch捕獲以便進一步處理。繼承

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

77. try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎?

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

代碼示例1:

/*
 * 若是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;
        } finally {
            a = 40;
        }
    }
}

執行結果:30

代碼示例2:

package com.java_02;
/*
 * 若是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;
         } finally {
            a = 40;
            return a; 
            //若是這樣,就又從新造成了一條返回路徑,因爲只能經過1個return返回,因此這裏直接返回40
         }
    }
 }

執行結果:40

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

  • NullPointerException:空指針異常,當應用程序試圖訪問空對象時,則拋出該異常。
  • SQLException:SQL語句異常,提供關於數據庫訪問錯誤或其餘錯誤信息的異常。
  • IndexOutOfBoundsException:索引超出邊界異常,指示某排序索引(例如對數組、字符串或向量的排序)超出範圍時拋出。 
  • NumberFormatException:數字格式異常,當應用程序試圖將字符串轉換成一種數值類型,但該字符串不能轉換爲適當格式時,拋出該異常。
  • FileNotFoundException:文件找不到異常,當試圖打開指定路徑名錶示的文件失敗時,拋出此異常。
  • IOException:IO類異常,當發生某種I/O異常時,拋出此異常。此類是失敗或中斷的I/O操做生成的異常的通用類。
  • ClassCastException:類型轉換異常,是JVM在檢測到兩個類型間轉換不兼容時引起的運行時異常。
  • ArrayStoreException:數組貯存異常,試圖將錯誤類型的對象存儲到一個對象數組時拋出的異常。
  • IllegalArgumentException:不合法的參數異常,拋出的異常代表向方法傳遞了一個不合法或不正確的參數。
  • ArithmeticException:算術運算異常,當出現異常的運算條件時,拋出此異常。例如,一個整數「除以零」時,拋出此類的一個實例。 
  • NegativeArraySizeException:負數組大小異常,若是應用程序試圖建立大小爲負的數組,則拋出該異常。
  • NoSuchMethodException:無此方法異常,沒法找到某一特定方法時,拋出該異常。
  • SecurityException:安全異常,由安全管理器拋出的異常,指示存在安全侵犯。
  • UnsupportedOperationException:不支持功能異常,當不支持請求的操做時,拋出該異常。
  • RuntimeException:運行異常,是那些可能在Java虛擬機正常運行期間拋出的異常的超類。
相關文章
相關標籤/搜索