为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中创建自定义异常?

如何在Java中创建自定义异常?

LEATH 2019-08-31 14:54:06
我们如何在Java中创建自定义异常?
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

要定义已检查的异常,请创建子类(或子类的层次结构)java.lang.Exception。例如:


public class FooException extends Exception {

  public FooException() { super(); }

  public FooException(String message) { super(message); }

  public FooException(String message, Throwable cause) { super(message, cause); }

  public FooException(Throwable cause) { super(cause); }

}

可能抛出或传播此异常的方法必须声明:


public void calculate(int i) throws FooException, IOException;

...并且调用此方法的代码必须处理或传播此异常(或两者):


try {

  int i = 5;

  myObject.calculate(5);

} catch(FooException ex) {

  // Print error and terminate application.

  ex.printStackTrace();

  System.exit(1);

} catch(IOException ex) {

  // Rethrow as FooException.

  throw new FooException(ex);

}

您将在上面的示例中注意到IOException被捕获并重新抛出为FooException。这是用于封装异常的常用技术(通常在实现API时)。


有时会出现这样的情况:您不希望强制每个方法在其throws子句中声明您的异常实现。在这种情况下,您可以创建未经检查的异常。未经检查的异常是任何扩展的异常java.lang.RuntimeException(它本身是其子类java.lang.Exception):


public class FooRuntimeException extends RuntimeException {

  ...

}

方法可以在FooRuntimeException不声明的情况下抛出或传播异常; 例如


public void calculate(int i) {

  if (i < 0) {

    throw new FooRuntimeException("i < 0: " + i);

  }

}

未经检查的异常通常用于表示程序员错误,例如将无效参数传递给方法或尝试破坏数组索引边界。


该java.lang.Throwable班是所有的错误和异常,可以在Java中抛出的根源。 java.lang.Exception并且java.lang.Error都是Throwable。的子类。任何子类都Throwable可能被抛出或被捕获。但是,捕获或抛出通常是不好的做法,Error因为这用于表示JVM内部通常无法由程序员“处理”的错误(例如OutOfMemoryError)。同样你应该避免捕捉Throwable,这可能会导致你Error除了Exceptions 之外还能捕捉到它。


查看完整回答
反对 回复 2019-08-31
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

public class MyException extends Exception {

        // special exception code goes here

}

把它扔成:


 throw new MyException ("Something happened")

赶上:


catch (MyException e)

{

   // something

}


查看完整回答
反对 回复 2019-08-31
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

对于已检查的例外:


public class MyCustomException extends Exception { }

从技术上讲,任何扩展Throwable都可以抛出,但异常通常是Exception类的扩展,以便它们被检查异常(除了RuntimeException或基于它的类,未检查),而不是其他常见类型的throwable,Error通常不是为了在JVM内部之外进行优雅处理而设计的。


您也可以将异常设置为非公共,但是您只能在定义它们的包中使用它们,而不是跨包。


至于抛出/捕获自定义异常,它就像内置的那样 - throw via


throw new MyCustomException()

并通过


catch (MyCustomException e) { }


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 1011 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信