2014-02-09 82 views
0

是否有可能創建用戶定義的異常,並且只能在try-catch中捕獲它,或者是否必須使用throw語句拋出用戶定義的異常。何時使用用戶Java關鍵字拋出用戶定義的異常?

問題:我對使用throw關鍵字時是否有些困惑?我認爲這個throw與用戶定義的Exceptions一起使用。

代碼:(JAVA),只要你想扔任何Exception,無論是用戶定義的或不

public genericPanel() { 
    try { 
    if (i.length == size) { 
     throw new MyOwnDefinedError("Error - Size is 1 integer 
                   to large"); 
    } 
    for (int index=0;index<=i.length;index++) { 
     System.out.println(i[index]); 
    } 
    } catch (MyOwnDefinedError o) { 
     o.getMessage(); 
    } catch (Exception e) { 
     e.getMessage(); 
    } 
} 

class MyOwnDefinedError extends Exception { 
    MyOwnDefinedError(String myNewString) { 
    super(myNewString); 
} 
+0

我不明白。當你想破壞程序流並拋出異常時,你可以使用'throw'。 –

+0

你的問題更多關於如何使用'catch'關鍵字來捕捉你自己的異常? Java Runtime可以生成異常,也可以通過調用的代碼拋出異常,也可以自己拋出異常的實例(這可能是您定義的異常或預定義的異常)。有了這些信息,你能澄清一下你不明白的東西嗎? –

回答

1

throw使用。 「預定義」例外(如IOException)或自定義例外與您的MyOwnDefinedError中沒有區別。

0

在java中的throw關鍵字用於用戶定義的例外,你是對的。例如,您正在執行銀行應用程序,並且您想從客戶的帳戶中提取資金。正常情況下,金額不能爲負數,因此您會輸入InvalidAmountException或類似的東西。

每當需要強調特殊情況時,都會使用關鍵字本身,因此您將使用throw來拋出API中已存在或用戶實現的任何類型的異常。

由於它用於處理異常 - 如果將Exception類從java擴展,Exception應該通過使用throws關鍵字專門放在方法定義上。如果您希望在運行時彈出異常並可能中斷程序的執行,則可以擴展RuntimeException。在這種情況下,處理它的異常是可選的 - 你不必用throws指定它,或者你不必用try/catch塊來包裝方法的執行。

關於異常的完整教程可以在here找到。

0

你可以閱讀拋excepions Java文檔的答案: http://docs.oracle.com/javase/tutorial/essential/exceptions/throwing.html

之前,你可以捕捉異常,一些地方的代碼必須拋出一個。 任何代碼都會拋出一個異常:您的代碼,其他人編寫的包 中的代碼,例如Java 平臺附帶的包或Java運行時環境。無論拋出異常如何拋出 ,它總是拋出throw語句。

正如您可能已經注意到的那樣,Java平臺提供了衆多的異常類別 。所有類都是Throwable類的後代,並且所有類都允許程序區分執行程序期間可能發生的各種異常類型 。

您也可以創建自己的異常類來表示可能發生在您編寫的類中的問題 。實際上,如果您是包開發人員,您可能必須創建自己的一組例外 類,以允許用戶區分包中可能發生的錯誤與Java平臺或其他 包中發生的錯誤

0
  • 扔是用來拋出異常。
  • 拋出是方法定義的一部分。
  • 在給定的時間點,throw語句只能拋出一個異常。
  • 一個throw語句由一個異常實例發佈。
+0

你能舉一個方法定義的例子嗎?例如,如果我有我自己的異常,像上面那樣擴展異常。當我在方法存根中使用throws時,創建該類的類和該類的實例具有未處理的異常錯誤。 –

0

類測試 {

void testDivision(float a,float b) 
{ 
if(b=0.0) 
{ 
    try 
    { 
    throw new MathematicalException("Please, do not divide by zero"); 
    } 
    catch (MathematicalException ae) 
     { 
     System.out.println(ae); 
     } 
} 
else 
    { 
    float result=a/b; 
      System.out.println("Result:" + result); 
    }  
} 

public static void main(String args[]) 

{ 
float f1 = Float.parsefloat(args[0]); 
float f2 = Float.parsefloat(args[1]); 

Test t1 = new Test(); 
t1.testDivision(f1,f2); 
} 

class MathematicalException extends Exception 

      { 
       MathematicalException(); 



       MathematicalException(String msg) 
    { 
    super(msg); 
    } 
      } 

}

相關問題