2014-01-08 72 views
0

嗨如何將此運行時異常轉換爲已檢查的異常,此方法必須強制類用戶處理方法簽名中指定的異常。這個例外是未經檢查的例外。如何將此運行時異常轉換爲檢查的異常?

public class Exception { 

      int a, b, c; 

      void set(String data[]) throws NumberFormatException, ArrayIndexOutOfBoundsException { 
       a = Integer.parseInt(data[0]);//convert the string into int. eg1.("12" ---> 12) eg2.("df23" ---> fail) 
       b = Integer.parseInt(data[1]); 
       c = 0; 
      } 

      void divide() throws ArithmeticException { 
       c = a/b; 
      } 

      void disp() { 
       System.out.println(a + "/" + b + " = " + c); 
      } 
     } 

回答

0

讓您的Exception類擴展檢查的異常。

2

只是包裝它變成一個適用檢查的異常在上下文

throw new Exception(runtimeException); 

我用Exception但你可以使用自己的CustomExceptionextends Exception,敷RuntimeException進去。

提示:

另外,還要確保您要使用的checked exception類似的場景。運行時異常保留運行時間,原因是無法恢復。因此,確保您正在封裝的運行時異常將作爲檢查的異常有用。來電應該能夠從中得到一些價值

其次,正如我在提示中所說的,主叫方無法從ArrayIndexOutOfBoundsException中恢復,它不會爲主叫方提供任何目的。

編輯:

我向您展示的demo,但是我贊成這樣做的沒辦法。首先ArrayIndexOutOfBoundsException不應該被拋出,你應該小心,數組不會超出你的代碼索引。

void set(String data[]) throws Exception{ 
    try{ 

    }catch(NumberFormatException ex){ 
     throw new Exception(ex); 
    }catch(ArrayIndexOutOfBoundsException aiobe){ 
     throw new Exception(aiobe); 
    }  
} 
+0

在哪裏可以換PLZ清除我 – user3168013

+0

檢查更新的答案。 –

0

可以在塊趕上例外,而不是讓它吐:

public class Exception 
{ 
    int a, b, c; 
    void set(String data[]) 
    { 
     try 
     { 
      a = Integer.parseInt(data[0]); 
      b = Integer.parseInt(data[1]); 
      c = 0; 
     } 
     catch(NumberFormatException nfe) 
     {} 
     catch(ArrayIndexOutOfBoundsException aiofbe) 
     {} 
     catch(Exception e) 
     {} 
    } 

    void divide() 
    { 
     try 
     { 
      c = a/b; 
     } 
     catch(NumberFormatException nfe) 
     {} 
     catch(Exception e) 
     {} 

    } 

    void disp() 
    {   
     System.out.println(a + "/" + b + " = " + c); 
    }  
} 
+0

我不想處理這些異常,我的類用戶必須使用try catch來處理該異常。 – user3168013

+0

@ user3168013你有從另一個類的用戶調用這些方法嗎? – Lakshmi

0

你是什麼意思?你想從RuntimeException擴展你的類,或者什麼? 如果你想捉的RuntimeException在此塊:

void set(String data[]) throws NumberFormatException, ArrayIndexOutOfBoundsException { 
a = Integer.parseInt(data[0]);//convert the string into int. eg1.("12" ---> 12) eg2.("df23" ---> fail) 
b = Integer.parseInt(data[1]); 
c = 0; 
}  

所以使用try/catch語句結構,像

try{ 
    a = Integer.parseInt(data[0]);//convert the string into int. eg1.("12" ---> 12) eg2.("df23" ---> fail) 
    b = Integer.parseInt(data[1]); 
    c = 0; 
} catch (RuntimeException e) { 
    throw MyCoolCheckedExceptin(e.getMessage, e); 
} 
0

您可以捕捉運行時異常,如果你想將其轉換成經過檢查的異常。在下面的代碼片段中,如果使用set(),那麼它將強制用戶執行檢查的異常。

void set(String data[]) throws Exception { 
     try { 
      a = Integer.parseInt(data[0]);//convert the string into int. eg1.("12" ---> 12) eg2.("df23" ---> fail) 
      b = Integer.parseInt(data[1]); 
      c = 0; 
     } catch (NumberFormatException e) { 
     throw new Exception(); 
     } 
    } 
0

把它包在自己的定義Exception

class MyOwnArithmeticException extends Exception { 
    public MyOwnArithmeticException(Throwable cause) { 
     super(cause); 
    } 

    //implement other constructors too 
} 

然後你的方法改爲

void divide() throws MyOwnArithmeticException { 
    try { 
     c = a/b; 
    } catch (ArithmeticException e) { 
     throw new MyOwnArithmeticException(e); 
    } 
}