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

运行时/已检查/未检查/错误/异常之间的差异

劳韬
2023-03-14
问题内容

什么是运行时异常?什么是“检查/未检查”异常以及“错误/异常”之间的区别?为什么有这么多类型?相反,Java可能仅遵循简单的设计(仅尝试/捕获所有类型)来处理程序中的异常情况?


问题答案:

Throwable是所有异常的重中之重。在Throwable下面,您有Error和Exception。在异常下,您具有RuntimeException。

Java有两种类型的异常-
已检查和未检查。被检查的异常由编译器强制执行(您必须在throws子句中声明它们并最终捕获它们)。未强制使用未经检查的异常在throws子句中进行捕获或声明。

(答案中有争议的部分)

存在Throwable,因此所有异常类型都有一个父级。您永远不要声明自己抛出Throwable,也不要抓住它(除非您真的非常真正地知道自己在做什么)。

存在错误以指示运行时环境问题,程序可能无法从中恢复的事情,例如格式错误的类文件或VM内存不足。除非您真的知道自己在做什么,否则不要捕获错误。

异常作为所有非程序员错误的根存在(请参见RuntimeException的“例外”),例如由于磁盘已满而无法创建文件。您不应该抛出,抛出或捕获Exception。如果必须赶上Exception,请确保您知道自己在做什么。

存在RuntimeException以指示所有程序员错误,例如,超出数组末尾或对空对象调用方法。这些是您应该修复的事情,以便它们不会引发异常-
表示您,程序员,搞砸了代码。同样,除非您知道自己在做什么,否则不要抓住这些。



 类似资料:
  • 我有以下两个示例,我不清楚java.lang.Exception是如何处理的:作为检查的或未检查的异常。 以下方法编译成功: 在这里,我认为java.lang.Exception是威胁java.lang.RuntimeException或java.lang.Error。不处理也可以声明扔。 如果我们没有使用异常,而是使用了检查异常(它是java.lang.Exception的子类),那么您必须在方

  • 问题内容: 我在理解Java 和异常之间的区别时遇到了一些问题。 首先,异常应该在编译时寻找异常。在不同来源中提供的示例引用了数据库连接性,其中一些是文件处理,而异常应该是在程序员方面寻找错误,例如索引超出数组范围等。 不应该反过来吗?我的意思是,数据库连接是在运行时完成的,对吧?文件处理也是如此。您没有在编译时打开文件句柄,那么为什么在编译时会寻找一个可能的错误呢?另一方面,超出数组范围的索引已

  • 本文向大家介绍Java中检查和未检查异常之间的区别,包括了Java中检查和未检查异常之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解Java中已检查和未检查的异常之间的区别。 检查异常 它们在编译时发生。 编译器检查已检查的异常。 这些异常可以在编译时进行处理。 它是异常类的子类。 JVM要求捕获并处理异常。 已检查异常的示例-“找不到文件异常” 未检查的异常 这些异常在运

  • 问题内容: 在Java(或任何其他具有检查的异常的语言)中,当创建自己的异常类时,如何决定应检查还是不检查它? 我的直觉是,在调用者能够以某种有效的方式进行恢复的情况下,将要求使用检查异常,而对于无法恢复的情况,未检查异常将更多,但是我会对其他人的想法感兴趣。 问题答案: 只要你知道何时应使用检查异常,它就很棒。Java核心API未能遵循SQLException(有时甚至是IOException)

  • 问题内容: 我在一个带有旧服务层的项目上工作,如果请求的记录不存在,或者由于调用者未得到授权而无法访问,则在很多地方返回null。我说的是ID要求的特定记录。例如,类似: 最近,我一直在努力更改此API,或者用引发异常的新API进行补充。随之而来的是关于检查与未检查的异常的争论。 从JPA / Hibernate等所有设计师的笔记中,我建议未检查的异常可能是最合适的。我的观点是,不能合理地期望AP

  • 问题内容: 据我了解,如果不逐一查找API文档,就无法找出方法抛出的异常。 由于这是没有选择的,因此我想撤消研究,并询问您在处理时遇到的最常见的Exception和RuntimeException: 铸件 数组 向量,ArrayList,HashMap等 IO(文件类,流,过滤器…) 对象序列化 线程(wait(),sleep()等) 或任何其他被视为“基本Java”的内容 我意识到这可能是主观的