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

Java 是否应报告异常的消息文本?

贺桐
2023-03-14
问题内容

考虑一些可能引发检查异常(类型为的异常Exception)的代码。catch当然,你的代码是例外。你也不仅可以吞下该异常,还可以通过你的代码通过用户界面以某种方式向用户报告该异常。也许在日志文件中,或使用GUI弹出窗口。

你报告给用户的文本是否应包含异常的消息文本。也就是说,由Throwable.getMessage()或Throwable.getLocalizedMessage()?提供的文本。

我认为不是,但是似乎很多人不同意我的看法。那我怎么了?我的论据如下。

  • 该消息是在引发异常时创建的。因此,它充其量只能提供非常低级的信息,可能不适合向用户报告。
  • 从哲学上讲,在我看来,使用消息与异常的整体观点相反,这是将错误处理的检测和启动(throw部分)与处理和报告的完成(部分)分开catch。使用该消息意味着该消息必须能够很好地进行报告,从而将报告的责任转移到仅应负责检测和启动的位置。也就是说,我认为getMessage()设计的一部分Throwable是错误的。
  • 该消息未本地化。尽管有它的名字,但是它getLocalizedMessage()并不是很好,因为你可能直到你catch例外之前都不知道要使用什么语言环境(是要转到英语系统管理员阅读的系统日志的报告,还是要在窗口中弹出以查看GUI的法语用户?)。
  • 我听说Java 7为改进了异常层次结构IOException,使你能够处理不同catch子句中的各种I / O错误,从而使getMessage()文本的重要性降低。这就意味着,即使Java设计人员对,也有些不满意getMessage()。
    我不是问报告堆栈跟踪是否有用。堆栈跟踪只会对提示错误的异常有用。也就是说,对于未经检查的异常。我认为在这种情况下,提供异常消息的低级详细信息不仅有用,而且是强制性的。但是我的问题涉及已检查的异常,例如文件未找到。

问题答案:

如果向用户显示错误情况,则可能应该是用户友好的消息。例外包含用户不应该/不需要知道的技术细节。

在某些情况下,显示堆栈跟踪信息可能是安全问题,所以永远不要向用户显示堆栈跟踪。

如果要向用户显示错误消息,则有些时候你有意识地决定显示弹出窗口或将消息添加到日志窗口。到那时,你可以将任何异常转换为更用户友好的消息。请注意,你可能需要比默认Exception类型提供的更多的信息,因此你可以/应该创建自己的Exception类型,其中包含所需的所有信息,以向用户提供所需的所有数据。



 类似资料:
  • 问题内容: 在学习Java时,我经常会偶然发现此错误。它是这样的: 只是一个例子,我见过很多不同的例子。在这种情况下,导致错误的代码是: 一旦将语句放入块中,错误总是消失并且代码编译并成功运行。有时对我来说已经足够了,但有时却不行。 首先,我从中学习的示例并不总是使用,但是显然应该可以使用。 更重要的是,有时当我将整个代码放在中时,它根本无法工作。例如在这种情况下,我需要; 在区块中;但如果上述本

  • 问题内容: 我收到了一个未报告的异常;必须在下面的fill方法中被捕获或声明为抛出错误。从我读过的类似文章中,我假设错误是由read方法引发Exception引发的,但我无法修复。 填充定义为: 问题答案: 您的call ,它被声明为throw ,但是您既没有捕获witin异常,也没有声明它可能被抛出。 最简单的解决方法是将的签名更改为: 我也强烈建议 不要 关闭中的读者。通常,获取资源的相同代码

  • 然而,试图使用jsp与bean交互时,在运行它时会出现一些错误。 下面是我在浏览器中看到的错误 生成的servlet错误:[javac]c:\sun\appservernew\domains\domain1\Generated\jsp\j2ee-apps\converterapp\war-ic_war\org\apache\jsp\index_jsp.java:24:未报告的异常javax.ejb

  • 说明 此消息用于统一的门店异常告警消息上传,目前支持结账异常消息 请求地址 http://api.dc78.cn/Api/msg_err_post 请求方式 POST 请求参数 GET参数 描述 type=cash,异常类型,cash:结账支付异常,warn:营业异常(如退单) POST参数 描述 title=消息类型(如:退单) msg=桌台888结账失败,原因。。。 返回 { "status"

  • 问题内容: 我想打开一个文件并对其进行扫描以打印其令牌,但出现错误:未报告的异常java.io.FileNotFoundException; 必须被捕获或声明为抛出Scanner stdin = new Scanner(file1);该文件与正确的名称位于同一文件夹中。 问题答案: 您正在使用的构造函数将引发FileNotFoundException,您必须在编译时捕获该异常。 上面的表示法(在括

  • 你好,我试图在NetBeans7 IDE,java6,glassFish3.2环境中生成动态报告。我正在使用java创建项目 commons-collections-3.2.1 commons-digester-2.0 dynamicreports-1.3.0 dynamicreports-adhoc-4.0.1 dynamicreports-core-4.0.1 itext-2.1.7 jasp