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

时间:2015-06-01 19:48:48

标签: java c++ exception specifications

我从C ++开始使用Java。 在Java和C ++中,我们都可以指定异常。它看起来像这样:

void function_name() throw(Exception)
{
  ...
  if (error) 
  {
    throw Exception("Error");
  }
  ...
}

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

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

2 个答案:

答案 0 :(得分:4)

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

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

通常,作为一种好的做法,当你将它定义为方法合同的一部分时,你应该抛出一个检查过的异常,即方法调用者必须知道一些特定的(非常可能和可恢复的)类型错误并捕获并处理它,或将其传递给调用堆栈。未经检查的异常通常表示方法代码中存在一些内部错误,因此无需捕获。

答案 1 :(得分:0)

Java中没有利润,异常规范是强制性的。 Java的设计使用了比C ++更强大的类型系统。在C ++中,异常规范是可选的,Java设计者认为异常是程序设计的一个重要部分,因此他们决定在函数可以抛出异常时强制执行异常规范。这有时会引起争议,但却是语言设计的选择。例外情况是电话合同的一部分。