Java:在一个 block 中使用 Catch 和 throws?

标签 java exception error-handling try-catch runtimeexception

捕获然后还抛出如下所示的异常有什么意义?两者都做是不好的做法吗?

  try{

    //something

    } catch (Exception e){

    throw new RuntimeException("reason for exception");
    }

最佳答案

通常,此类代码用于重新包装异常,这意味着转换异常的类型。通常,当方法中允许的异常受到限制时,您可以执行此操作,但内部可能会发生其他类型的异常。例如:

class MyServiceImplementaiton implements MyService {
    void myService() throws MyServiceException { // cannot change the throws clause here
        try {
            .... // Do something
        } catch(IOException e) {
            // re-wrap the received IOException as MyServiceException
            throw new MyServiceException(e); 
        }
    }
}

这种习惯用法能够不断向调用者传播异常,同时符合接口(interface)中的 throws 子句并隐藏内部细节(IOException 可能发生的事实)。

实际上,这总是比仅仅调用 e.printStackTrace() 更好,后者实际上会“吞掉”错误条件并让程序的其余部分像什么都没发生一样运行。在这方面,Eclipse 的行为非常糟糕,因为如果开发人员不小心,它往往会自动编写此类不良实践构造。

关于Java:在一个 block 中使用 Catch 和 throws?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341926/

相关文章:

php symfony 异常处理/错误处理

java - 将包含中文或日文或英文的字符串拆分为单词

java - 为什么这种类型推断不适用于这个 Lambda 表达式场景?

java - Spring @Transaction注解和异常处理

java - 无法解析获取无效数组范围 : 5 to 5 的响应

python - 如何避免在 python 的垃圾收集期间抑制 KeyboardInterrupt?

validation - MVC 5 - 从客户端检测到潜在危险的 Request.Form 值

python-3.x - python中网络抓取期间的json错误转储

java - 我如何模拟 Ignition.start()

java - LibGDX:如何在带缩放和不带缩放的瓦片的瓦片 map 中获得相同的坐标