Java 中的异常规范有什么好处?
What's the benefit of exceptions specification in Java?
我是从 C++ 来到 Java 的。
在 Java 和 C++ 中,我们都有可能 指定异常 。它看起来像这样:
void function_name() throw(Exception)
{
...
if (error)
{
throw Exception("Error");
}
...
}
据我所知,在 C++ 中编写异常规范被认为是一种不好的做法。与 C++ 不同,在 Java 中我们必须这样做。所以,我的问题是:
在Java中编写异常规范有什么好处?
您必须在方法签名中仅指定已检查的异常(Exception
class 的子classes)。不需要指定未经检查的异常(RuntimeException
class 的子classes)。
在方法签名中指定异常是语言语义定义的固有 Java 做法。但也有很多关于它的争议。一些团队和项目甚至认为这是一种不好的做法,只使用未经检查的异常。
通常,作为一种好的做法,当您将检查异常定义为方法契约的一部分时,您应该抛出检查异常,即方法调用者必须知道某些特定的(很可能且可恢复的)错误类型,并且要么捕获并处理它,要么将它传递到调用堆栈。未经检查的异常通常表示方法代码中存在一些内部错误,因此不需要捕获。
Java中没有profit,异常说明是必须的。 Java 被设计成比 C++ 更强大的类型系统。在 C++ 中,异常规范是可选的,Java 设计者认为异常是程序设计的重要组成部分,因此他们决定在函数可能抛出异常时强制执行异常规范。这有时是有争议的,但它是一种语言设计选择。例外是调用合同的一部分。
我是从 C++ 来到 Java 的。 在 Java 和 C++ 中,我们都有可能 指定异常 。它看起来像这样:
void function_name() throw(Exception)
{
...
if (error)
{
throw Exception("Error");
}
...
}
据我所知,在 C++ 中编写异常规范被认为是一种不好的做法。与 C++ 不同,在 Java 中我们必须这样做。所以,我的问题是:
在Java中编写异常规范有什么好处?
您必须在方法签名中仅指定已检查的异常(Exception
class 的子classes)。不需要指定未经检查的异常(RuntimeException
class 的子classes)。
在方法签名中指定异常是语言语义定义的固有 Java 做法。但也有很多关于它的争议。一些团队和项目甚至认为这是一种不好的做法,只使用未经检查的异常。
通常,作为一种好的做法,当您将检查异常定义为方法契约的一部分时,您应该抛出检查异常,即方法调用者必须知道某些特定的(很可能且可恢复的)错误类型,并且要么捕获并处理它,要么将它传递到调用堆栈。未经检查的异常通常表示方法代码中存在一些内部错误,因此不需要捕获。
Java中没有profit,异常说明是必须的。 Java 被设计成比 C++ 更强大的类型系统。在 C++ 中,异常规范是可选的,Java 设计者认为异常是程序设计的重要组成部分,因此他们决定在函数可能抛出异常时强制执行异常规范。这有时是有争议的,但它是一种语言设计选择。例外是调用合同的一部分。