Java 中的异常规范有什么好处?

Jam*_*wuh 5 c++ java specifications exception

我是从 C++ 转向 Java 的。在 Java 和 C++ 中,我们都有可能指定异常。它看起来像这样:

void function_name() throw(Exception)
{
  ...
  if (error) 
  {
    throw Exception("Error");
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

据我所知,在 C++ 中编写异常规范被认为是一种不好的做法。与 C++ 不同,在 Java 中我们必须这样做。所以,我的问题是:

用Java编写异常规范有什么好处?

Ser*_*nin 5

您必须Exception在方法签名中仅指定已检查的异常(该类的子类)。RuntimeException不需要指定未经检查的异常(该类的子类)。

在方法签名中指定异常是由语言语义定义的固有 Java 实践。但对此也存在不少争议。一些团队和项目甚至认为这是一种不好的做法,并且只使用未经检查的异常。

一般来说,作为一个好的实践,当您将其定义为方法契约的一部分时,您应该抛出一个已检查的异常,即方法调用者必须意识到某些特定的(非常可能且可恢复的)错误类型,并且捕获并处理它,或者将其传递到调用堆栈中。未经检查的异常通常表示方法代码中的一些内部错误,因此不需要捕获。