当前位置: 首页 > 面试题库 >

应该捕获Throwable的哪个子类,而不应该捕获哪个?

夏才
2023-03-14
问题内容

API文档说永远不要捕获 Throwable 子类 错误
,这表示异常行为。这是否意味着错误和异常之间的隔离是为了告诉程序员应该捕获哪个子类,而不应该捕获哪个子类?还是还有更多呢?


问题答案:

通常,这Error是严重错误(通常 在平台本身内部 ),您无法想象得到处理。我曾经关心醒目的唯一时间Error是为了 记录它
,下面我再重新抛出。

这是非常重要的,因为它很容易让错误(和运行时异常),以这样的方式,他们从未登录(例如,使用沿着调用堆栈executorService.submit(Runnable)不听返回Future

Errors通常是这样的:

  • 记不清
  • 抽象方法错误(例如,针对不同版本的库运行)
  • 断言(即,程序员定义的 不变量 ,或不应发生的事情-大声笑!)

然后,我会说RuntimeExceptions通常(尽管并非总是)指示 编程 错误:

  • 不检查null或传入null
  • 传递无效的参数或允许无效的状态
  • 遍历集合时修改集合

我通常也建议在这些方面进行快速失败,但这是一个灰色区域。也许您在将用户输入传递到服务器之前不检查用户输入-几乎不值得使您的应用崩溃!

Checked
Exception(即非运行时)应用于您可以合理预期发生并可以合理(或可以想象)在代码中处理的内容。我个人喜欢检查异常,但是由于以相同方式(即,在多个相同的catch块中)处理不同异常类型所涉及的冗长/重复,这些异常繁琐。Scala之类的语言具有更好的catch语法,但随后它们也删除了
检查 异常的概念!



 类似资料:
  • 我有一个SQL语句,我希望它返回一行,因为我正在传递主键。所以我的选择是 将queryForObject包装为try/catch,捕获EmptyResultDataAccessException,并返回null 将调用更改为queryForList,然后展开列表,并(希望)返回第一个元素,或null 我在某个地方读到过,将EmptyResultDataAccessException作为cathin

  • 问题内容: 我正在Linux下使用g 在C 中编写一个非常简单的应用程序,并且试图将一些原始字符串作为异常抛出(是的,我知道,这不是一个好习惯)。 我有以下代码(简化): 然后我进入控制台。但是,如果我将文字字符串静态转换为其中一个,或者按预期打印。我的问题是:如果我不想使用静态强制类型转换,我应该捕获哪种类型? 问题答案: 您需要使用而不是。任何东西都不会,也不会抓住。 关于匹配的类型,捕获具有

  • 我正在处理Perl 6的控制异常。警告会引发正常异常控制流不可见的控制异常,该异常会自行恢复。那有点酷。 所以,我写了这个来看看会发生什么。除了了解Perl 6的实际功能外,我不想解决特定的问题: 它看起来像两个火: 注意,有一种莫阿恐慌,我已经提出了一个问题。但是,我并不是真的在问这个问题。 我对这里的水流图很好奇。我希望sub中的能够捕获异常并恢复,这样它就不会渗透到。这应该如何进行? 另外,

  • 您知道为什么在控制器层中创建吗?如果在服务层创建会发生什么?

  • 问题内容: 在子句调用时,将A 扔入块中而不被捕获。 输出是 如果从最后删除,则输出为 在的消息之前,之后或之间可能出现 “最终” 的地方。 有人可以解释吗? 问题答案: 肯定会在main方法退出之前执行finally块,然后由JVM打印stacktrace。 也许stacktrace被打印到System.err,并且两个流以不可预测的方式混合在控制台输出中(因为它们基本上是同时产生的)。 当您也

  • 问题内容: 总览 我正在客户端(Android手机)和服务器(Windows Server)之间来回发送消息。使用基于TCP的持久连接,哪种协议将是最佳解决方案。我正在研究性能,可伸缩性,消息大小和电池寿命。消息必须按顺序到达目的地,并且不能重复。 MQTT 这似乎是更好的解决方案,但似乎很少有大量用户使用大型实现的示例。我不确定是否可以将其集成到Windows服务器中,或者是否必须运行其他应用程