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

Java中已检查和未检查的异常如何工作?

墨阳羽
2023-03-14
问题内容

阅读本书中的
Exception时,我发现了以下语句:

被检查的异常由编译器在编译时检查。

编译器不会在编译时检查未经检查的异常。

因此,如果我们也可以说IOExceptionSQLException位于Checked Exceptions类树之下。如何将java编译器知道
会有 一个例外,没有对IllegalArgumentException 其中 可能 仍然 代码为我的理解里面。

另外,强制捕获Checked异常而不是Unchecked意味着什么呢?


问题答案:

Java中的异常均以相同的方式工作。
检查和unchecked异常(这是所有子类之间的差别的RuntimeException)如果该抛出一个checked异常谁调用这个方法具有可尝试的方法/捕获该异常,或宣布自己的方法抛出该异常。

所以,如果我有一种方法:

void throwsACheckedException() throws SomeCheckedException;

叫它的人必须做2件事之一。要么:

try {
   throwsACheckedException();
} catch (SomeCheckedException e) {
   //do something
}

要么

void someCallingMethod() throws SomeCheckedException { //pass it on
   throwsACheckedException();
}

无需声明的未经检查的异常,调用该方法的任何人都不必显式捕获。例如:

void someInnocentLookingMethod() {
   throw new NullPointerException("surprise!"); //...extends RuntimeException
}

然后您可以简单地调用它,而不会遇到try / catch的麻烦:

void unsuspectingVictim() {
   someInnocentLookingMethod();
}

未经检查的异常通常用于随时可能蔓延到您的事物,因此强迫开发人员尝试/捕获它们会使代码非常乏味(例如,NullPointerException),尽管有些人将事物检查的异常完全视为罪恶:
-)



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

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

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

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

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

  • 问题内容: 我在Java中有这个工厂方法: 我想将两个已检查的异常转换为未检查的异常。最好的方法是什么? 我是否应该仅捕获异常并使用捕获的异常作为内部异常抛出新的RuntimeException? 有没有更好的方法可以做到这一点?或者我应该首先尝试这样做吗? 编辑: 只是为了澄清。这些异常将是致命的,因为配置文件实质上是程序的运行,所有异常都将在程序的顶层捕获并记录。 我的目的是避免不必要的引发异