Java: 有什么方法可以指定何时抛出异常?

Java: Is There Any Way to Specify When an Exception Will be Thrown?

我有类似这样的伪代码:

void doSomething(int data) throws Exception{
    if(data < 10) throw new Exception("Exception thrown"); // throws an exception based on a condition
    else { ... } // logic goes here
}

当我尝试在主函数中调用 doSomething 时,出现错误:

public static void main(){
    doSomething(11); // Error! unreported exception 
}

Here 是上一个示例的 link。

所以我必须执行以下操作之一:

  1. 在每个 doSomething 调用周围添加一个 try catch 块
  2. 在main中添加throws语句
  3. 去掉 doSomething 中的 throws 语句
  4. 将条件作为先决条件,这样不遵守它就会导致未定义的行为或类似的事情。

3 将不起作用,因为 doSomething 在客户端使用时可能会抛出异常。 1和2简直是多余的,我觉得应该避免。

最后,4 对我最有吸引力(主要是 C++ 编码器)但与 Java 编程相反。

我的问题是:上述选项(或任何其他选项)的最佳方法是什么,实施它的最佳方法是什么?

这实际上取决于您正在使用的上下文。

如果您希望代码在抛出异常时停止执行,您可以使用运行时异常,您不必捕获它们。

好的用例是 REST 端点。如果在计算响应期间出现问题,我们可以抛出 ResponseStatusException - 运行时异常,它会立即 return 向客户端发送 Http 响应错误并停止代码的任何进一步执行。

相反,如果你有一个即使抛出异常也必须执行的逻辑,最好的方法是使用try-catch块,或者在方法声明中添加throws语句并try-catch在父方法中。