Java自定义异常类构造函数

时间:2017-07-26 19:53:22

标签: java exception exception-handling

让我们说我在Java中编写自定义异常类。两个构造函数之间的区别是什么?在什么情况下我想要使用其中一个?

class CustomException extends Exception{
     public CustomException(String msg);  
     public CustomException(String msg, Throwable cause);
   or 
     public CustomException(String msg, Exception ex);
}

代码阻止此customException,一旦它捕获远程调用中发生的其他异常。

} catch(Exception1  | Exception2  | Exception3 ex){
      throw new CustomException("custom", ex) 
}

让Throwable给我们灵活性吗?鉴于代码只捕获异常,是否存在差异?

2 个答案:

答案 0 :(得分:1)

你永远不应该捕获/处理不是例外的Throwables。有关更多信息,请参阅Java文档。

编辑:每个Throwable,这不是异常是一个错误。错误是不寻常的状态,永远不会发生。

链接: here https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html

答案 1 :(得分:1)

您不需要传递不属于Throwable的{​​{1}}。唯一不是Exception的{​​{1}}是Throwable s。

如果你需要在构造函数中传递它们,这意味着你需要先捕获它们。捕获Exception通常很糟糕,因为根据java api,它代表了一个合理的应用程序无法捕获的严重问题。错误主要是错误造成的在JVM中,你无法做任何事情。可能,您的JVM将被破坏,因此处理它们不再可靠。你当然不应该尝试将错误转换为异常。

所以那些签名很好:

Error

但这一点毫无意义:

Error

因为您要捕获和传播的所有原因都是public CustomException(String msg, Exception cause); public CustomException(String msg); s,而不是public CustomException(String msg, Throwable cause); s。