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

建立Java库和捕捉异常

山煜祺
2023-03-14

我正在建造我的第一个Java图书馆。代码使用了大量的IO方法,因此可以想象有大量的异常需要捕获。但我在想,我应该抛出例外吗?我的意思是,捕捉异常当然是应用程序编写者的工作。因为即使我抓到了它们,我也不知道应用程序在发生这种情况时会做什么。

我应该抛出IOExceptions等,还是应该在库代码中捕获它们?

共有1个答案

雷浩思
2023-03-14

您应该只在可以的情况下处理异常--也就是说,如果您的库对如何处理异常有足够的知识的话。

下面是一个应该处理异常的示例:

  • 库收到用户的请求
  • 库尝试读取配置文件
  • 找不到配置文件,因此存在IOException
  • 库捕获异常并返回到使用默认配置(可能会向用户发出没有配置文件的警告)

下面是一个不应处理异常的示例

  • 库接收来自用户的请求
  • 尝试从请求中的字符串分析整数时处理请求失败(获取NumberFormatException)
  • 库无法处理该异常-假设默认值(例如0)将是危险的
  • 异常被抛回用户以供其处理

如果您要抛出一个异常给用户,捕获并重新抛出异常通常是一个很好的实践--这使您能够将它包装在自己的自定义异常类中,并可能添加额外的消息/细节等。

一般来说,请记住,如果您想编写一个好的软件组件,那么它应该具有fail-fast行为。如果有疑问,您应该失败,并让用户知道(通过一个例外),而不是试图继续在一个不健全的基础上。

 类似资料:
  • 然后我把它用作: 但是最后一行代码没有捕获任何异常,我的代码给出运行时异常并停止。你能解释为什么会发生这种情况,如果可能的话,如何修复它吗?

  • 本文向大家介绍.NET Framework 捕捉异常,包括了.NET Framework 捕捉异常的使用技巧和注意事项,需要的朋友参考一下 示例 在特殊情况下,代码可以并且应该引发异常。例如: 尝试阅读流的末尾 没有访问文件的必要权限 尝试执行无效的操作,例如被零除 从Internet下载文件时发生超时 调用方可以通过“捕获”它们来处理这些异常,并且仅应在以下情况下进行: 它实际上可以解决特殊情况

  • 我有一些消息生产者正在使用ActiveMQ发送有关某些事件的JMS消息。但是,与ActiveMQ的连接可能不会一直处于关闭状态。因此,事件被存储,当建立连接时,它们被认为是读取和发送的。这是我的代码: 我想创建某种将在建立连接并处理未发送事件时调用的Application ationEventListener。我浏览了JMS、Spring框架和ActiveMQ留档,但找不到任何线索如何将我的侦听器

  • 问题内容: 我听说捕捞被认为是不好的作法。我当前正在加载一个不能保证在PATH上的.dll,并希望在不存在的情况下切换到用户配置的位置。 有更好的方法吗?还是在这里接受是可以接受的? 问题答案: 除了提供有关如何从技术上解决问题的建议以外,我想花点时间解释一下为什么它首先被认为是“不好的做法”。 让我们从澄清什么是类开始。 在Java中,将引发错误和异常(它们是主要类型)。通过使用关键字可以完成上

  • 在节点中。在js服务器上,捕获SIGTERM和捕获SIGINT有什么区别吗? 我认为进程不应该能够防止SIGINT关闭? 我是否能够捕获两个信号并阻止退出?我的实验表明答案是肯定的,但从我所读到的内容来看,SIGINT总是假设关闭一个进程。 或者我把SIGINT和SIGKILL混淆了?也许SIGKILL是我无法恢复的信号? 捕捉这些信号当然可以让我优雅地关机: 我想我把SIGINT和SIGKILL

  • 本文向大家介绍Java多线程之多线程异常捕捉,包括了Java多线程之多线程异常捕捉的使用技巧和注意事项,需要的朋友参考一下   一:为什么要单独讲多线程的异常捕捉呢? 先看个例子:   在run中手动抛出了一个运行时异常,在main中启动线程,catch语句块中捕捉下异常,捕捉到打印一句话。运行结果如下图:   发现异常被抛到了控制台,没有打印catch块中的语句。   结论:多线程运行不能按照顺