2014-02-09 111 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); 
    } 
      } 

}

相关问题