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
类的子类)。不需要指定未检查的异常(RuntimeException
类的子类)。
在方法签名中指定异常是由语言语义定义的固有Java实践。但关于它也有很多争议。有些团队和项目甚至认为这是一个不好的实践,只使用未检查的异常。
一般来说,作为一个好的实践,当你将检查异常定义为方法契约的一部分时,你应该抛出一个检查异常,也就是说,方法调用者必须意识到一些特定的(非常可能和可恢复的)错误类型,要么捕获并处理它,要么将它传递到调用堆栈。未检查的异常通常表示方法代码中存在一些内部错误,因此不需要捕获。
Java中没有利润,异常规范是强制性的。Java被设计成比c++更强的类型系统。在c++中,异常规范是可选的,Java设计者认为异常是程序设计的重要组成部分,因此他们决定在函数可能抛出异常时强制执行异常规范。这有时是有争议的,但这是一种语言设计选择。异常是调用契约的一部分。
相关文章:
- 是什么导致了Unity 3D中的"错误线程异常"?
- C++异常被捕获延迟,可能导致这种情况的原因是什么?
- 您应该在什么时候创建自己的异常类型
- C++ 捕获异常后进行清理的标准方法是什么?
- 我一直得到'std::invalid_argument'什么():似乎无缘无故地抛出 stoi 异常?
- 终端(bash)如何知道引发了什么异常
- 什么时候在 c++ 中使用 exit() 与异常更好?
- std::p riority_queue::p op什么时候会抛出异常
- 处理许多自定义异常的最佳方法是什么
- 存在内存访问异常,但我不确定我的代码中出了什么问题
- 提出异常并处理C 的某些异常类型的正确方法是什么?
- 如果从在其他函数中调用的函数引发异常会发生什么情况
- 使用一个微不足道的异常类有什么意义
- 在类中抛出异常的最佳方法是什么
- 添加 DIV/0 异常处理。我做错了什么,但无法确定在哪里
- 是什么导致异常输出以及如何修复
- 与Java的InputMismatchException和IOException Handling等效的C++异常处理机制是什么
- 在 c++ 中什么可以(和什么不能)引发异常?
- 在C++中使用异常的可能的错误处理策略是什么,它们的后果和影响是什么
- close()抛出什么异常类型