天天看點

Java 異常處理異常分類異常捕獲相關面試題

異常分類

在Java中異常被當做對象來處理,根類是java.lang.Throwable類,在Java中定義了很多異常類(如OutOfMemoryError、NullPointerException、IndexOutOfBoundsException等),這些異常類分為兩大類:Error和Exception。

Java 異常處理異常分類異常捕獲相關面試題

Error

Error是無法處理的異常,比如OutOfMemoryError,一般發生這種異常,JVM會選擇終止程式。是以我們編寫程式時不需要關心這類異常。

Exception

Exception,也就是我們經常見到的一些異常情況,比如NullPointerException、IndexOutOfBoundsException,這些異常是我們可以處理的異常。

unchecked exception(運作時異常)

運作時異常(RuntimeException),比如常見的NullPointerException、IndexOutOfBoundsException。對于運作時異常,java編譯器不要求必須進行異常捕獲處理或者抛出聲明,由程式員自行決定。

checked exception(檢查性異常)

非運作時異常(運作時異常以外的異常就是非運作時異常),java編譯器強制程式員必須進行捕獲處理,比如常見的IOExeption和SQLException。對于非運作時異常如果不進行捕獲或者抛出聲明處理,編譯都不會通過。

異常捕獲

Java提供了try(嘗試)、catch(捕捉)、finally(最終)這三個關鍵字來處理異常。在處理各種異常時,需要用到對應的異常類,指的是由程式抛出的對象所屬的類。

try{
  // 程式代碼
}catch(異常類型1 異常的變量名1){
  // 程式代碼
}catch(異常類型2 異常的變量名2){
  // 程式代碼
}finally{
  // 程式代碼
}           

注意事項:

  • catch 不能獨立于 try 存在。
  • 在 try/catch 後面添加 finally 塊并非強制性要求的。
  • try 代碼後不能既沒 catch 塊也沒 finally 塊。
  • try, catch, finally 塊之間不能添加任何代碼。

相關面試題

下面程式的結果是()
public class Demo {
    public static String sRet = "";
    public static void func(int i)
    {
        try
        {
            if (i%2==0)
            {
                throw new Exception();
            }
        }
        catch (Exception e)
        {
            sRet += "0";
            return;
        } 
        finally
        {
            sRet += "1";
        }
        sRet += "2";
    }
    public static void main(String[] args)
    {
        func(1);
        func(2);
        System.out.println(sRet);
    }
}

A. 120
B. 1201
C. 12012
D. 101

正确答案: B