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

在Java中将已检查的异常包装为未检查的异常?

汝承载
2023-03-14
问题内容

我在Java中有这个工厂方法:

public static Properties getConfigFactory() throws ClassNotFoundException, IOException {
    if (config == null) {
        InputStream in = Class.forName(PACKAGE_NAME).getResourceAsStream(CONFIG_PROP);
        config = new Properties();
        config.load(in);
    }
    return config;
}

我想将两个已检查的异常转换为未检查的异常。最好的方法是什么?

我是否应该仅捕获异常并使用捕获的异常作为内部异常抛出新的RuntimeException?

有没有更好的方法可以做到这一点?或者我应该首先尝试这样做吗?

编辑:
只是为了澄清。这些异常将是致命的,因为配置文件实质上是程序的运行,所有异常都将在程序的顶层捕获并记录。

我的目的是避免不必要的引发异常,该异常被添加到调用我的工厂的每个方法的签名中。


问题答案:

RuntimeException仅当客户端无法从问题中恢复时,才应使用A。偶尔做您正在谈论的事情是适当的,但更多时候是不合适的。

如果您使用的JDK> = 1.4,则可以执行以下操作:

尝试{
  //可能引发异常的代码
} catch(IOException e){
  抛出新的RuntimeException(e);
} catch(ClassNotFoundException e){
  抛出新的RuntimeException(e);
}

并且重新投递RuntimeException的原因将包含在其中。这样,线程顶部的某个人抓住了RuntimeException-您的线程确实被抓住了,RuntimeException所以他们不会只是默默地死掉,对吗?-至少可以打印出原因的完整堆栈跟踪。

但是正如其他人已经说过并会说的那样,检查异常是有原因的。仅当确定您的客户端无法从作为非检查异常重新抛出的问题中恢复时,才执行此操作。

注意:RuntimeException如果有可用的话,使用一个更具体的未检查的异常要好得多。例如,如果您的方法可能引发a的唯一原因ClassNotFoundException是由于缺少配置文件,则可以重新引发a
MissingResourceException,这是未经检查的异常,但会提供有关为何引发它的更多信息。其他好的RuntimeExceptions到使用,如果他们描述你重新抛出的问题IllegalStateExceptionTypeNotPresentExceptionUnsupportedOperationException

还要注意,对于您的线程来说,捕获RuntimeException并至少对其进行记录总是一个好主意。至少通过这种方式,您了解线程为何消失。



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

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

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

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

  • 问题内容: 我一直在阅读有关未解决问题和已解决问题的信息,没有一个在线资源真正了解它们之间的区别以及何时使用两者。 据我了解,它们都在运行时抛出,它们都表示超出逻辑预期范围的程序状态,但是必须显式捕获已检查的异常,而未检查的异常则不能。 我的问题是,假设出于参数考虑,我有一个将两个数字相除的方法 以及需要在某处划分的方法 谁负责检查分母为零的情况,应该检查还是取消检查异常(忽略Java的内置div

  • 问题内容: 阅读本书中的 Exception时,我发现了以下语句: 被检查的异常由编译器在编译时检查。 和 编译器不会在编译时检查未经检查的异常。 因此,如果我们也可以说或 位于Checked Exceptions类树之下。如何将java编译器知道 会有 一个例外,没有对 其中 可能 仍然 代码为我的理解里面。 另外,强制捕获Checked异常而不是Unchecked意味着什么呢? 问题答案: J