让我们说我在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给我们灵活性吗?鉴于代码只捕获异常,是否存在差异?
答案 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。