当前位置: 首页 > 知识库问答 >
问题:

如何解释Exception是否会捕获RuntimeException?

沈俊晤
2023-03-14

这对我来说很奇怪。runtimeexception继承自exception,后者继承自throwable

catch(Exception exc) { /* won't catch RuntimeException */

但是

catch(Throwable exc) { /* will catch RuntimeException */
for(Callback cb : callbacks) {
    try {
        cb.call(item);
    }
    catch(Exception exc) {
        logger.error("Error in callback: ", exc);
   }
}

还有,这有点企业设计的味道。不同的程序员或团队可以添加回调来处理该项,但它们应该相互隔离。这意味着,作为负责将这些回调相互隔离的程序员,我不应该依赖它们来确保错误不会溜走。捕捉exception应该是正确的,但这并不是因为runtimeexception会漏过。所以我更普遍的问题是:这里什么是好的模式?只是catch(Exception RuntimeException exc),我认为这是由于继承导致的语法错误?

共有1个答案

赫连睿
2023-03-14

问题的前提有缺陷,因为捕获exception确实捕获了runtimeexception。演示代码:

public class Test {
    public static void main(String[] args) {
        try {
            throw new RuntimeException("Bang");
        } catch (Exception e) {
            System.out.println("I caught: " + e);
        }
    }
}

输出:

I caught: java.lang.RuntimeException: Bang

如果出现以下情况,循环将出现问题:

    null

也许这就是你看到的?

 类似资料:
  • 本文向大家介绍Java Exception 捕获和显示实例详解,包括了Java Exception 捕获和显示实例详解的使用技巧和注意事项,需要的朋友参考一下 Java Exception 捕获和显示实例详解   在进行Java B/S架构开发时,经常有这样的场景:后端处理业务逻辑,前端负责展示,当后端处理出现异常时,如何把错误信息展示给前台呢?错误信息栈通常很多,对开发人员查找问题比较方便,但对

  • export class SearchService { ... .map((response) => response.json()) .catch((e) => { if (e.status >== 500) { return cachedVersion(); new Error(`${ e.status

  • 问题内容: 任何Throwable都可以被捕获 输出: 因此,如果在初始化块期间做不好的事情,我希望能够捕获ExceptionInInitializerError。但是,以下操作无效: 输出: 并且如果我更改代码以另外捕获ArrayIndexOutOfBoundsException 被捕获的是ArrayIndexOutOfBoundsException: 谁能告诉我为什么呢? 问题答案: 顾名思义

  • 问题内容: 此问题与跨域资源共享(CORS)有关。 如果在发出CORS请求时出现错误,Chrome(以及AFAIK其他浏览器)会将错误记录到错误控制台。消息示例可能如下所示: XMLHttpRequest无法加载。原产地不被访问控制允许来源允许的。 我想知道是否有办法以编程方式获取此错误消息?我尝试将调用包装在try/catch中,也尝试添加事件处理程序。两者均未收到错误消息。 问题答案: 看到: