【问题标题】:Purpose of Java Exception HandlingJava 异常处理的目的
【发布时间】:2019-02-03 05:30:09
【问题描述】:

我在学习java异常处理的过程中遇到了以下疑惑,

我见过的大多数(几乎所有)示例都使用 try bock 抛出异常,并且适当的 catch 在控制台中向用户打印一条消息,最后阻止用于关闭/释放资源。

  1. 异常处理是否只是关于打印异常消息/原因?
  2. 虽然学习算术异常我得到的唯一例子是DividebyZero场景,是否还有其他操作会导致算术异常?

【问题讨论】:

  • 异常用于高效可靠地通信和处理“异常情况”。想要传达这些信息的原因有很多。 (我相信 ArithhemeticException 会被除以零。还有一些其他相对模糊的原因导致该异常。)

标签: java exception exception-handling


【解决方案1】:

不,异常处理是为了处理异常情况。我想你看到的例子并不完整。将堆栈跟踪记录/打印到System.err 可能是一个好主意,但实际上并不总是必要的(尽管在尝试调试代码时非常宝贵),而且这当然不是所有异常处理都是用于。

例如,假设您有一个程序可以解析用户输入文本框中的输入:

int userValue = Integer.parseInt(textBox.getText());

如果用户输入一个字母会发生什么?嗯,这是一个例外情况——parseInt() 正在尝试解析一个整数,那么它到底要对一个字母做什么呢?因此,异常情况触发NumberFormatException。在这里,处理异常的正确方法可能是提醒用户他/她的输入无效。不需要弄乱堆栈跟踪。

至于问题 2,当尝试生成一个十进制表示不结束的 BigDecimal 时,您可以得到 ArithmeticExceptions

BigDecimal a = new BigDecimal("1").divide(new BigDecimal("3"));

如果没记错的话,应该会抛出一个ArithmeticException...

【讨论】:

    【解决方案2】:

    不,异常处理不是要打印一条消息或异常原因,尽管这些对于弄清楚为什么首先抛出异常是必不可少的。

    异常处理确实更适合我们承认在程序的生命周期中可能会发生奇怪的事情,并且根据运行期间出现的“奇怪事情”的类型,我们可以希望从中恢复。

    以您的ArithmeticException 为例。这是一个异常,当应用程序的某些部分决定将某些内容除以零或出于其他原因时(其他类可能会抛出此错误;您必须阅读文档并找出原因)。 Java 认为它无法合理地从中恢复,所以它抛出一个运行时异常,或者一个通常不应该被捕获的异常。

    我鼓励您查看来自 Oracle 的 Exceptions Trail,因为这将提供关于不同类型异常是什么的宝贵知识。请注意,如果您的代码中确实存在异常,最好调查它的原因,而不是捕获它(和/或抑制它)。

    【讨论】:

      【解决方案3】:

      Java 中的异常处理是关于错误管理的。这是一种优雅地处理程序中的错误的方法。例如,您可以使用 Integer.parseInt() 将字符串转换为整数。如果无法解析字符串,它会抛出 NumberFormatException。在这种情况下,您可以捕获异常、默认值并向用户显示适当的消息。而且你的程序会更加健壮和优雅。

      【讨论】:

        【解决方案4】:

        有两种原因会导致我们的计划失败。一个是错误,另一个是异常。由于系统的无能(内存问题)而发生错误。但是,异常是由于编写代码中的问题而发生的一种问题。因此,程序员可以轻松管理这些问题。这就是为什么作为程序员,我们应该了解异常处理,以减少程序故障。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-10
          • 2015-09-16
          • 1970-01-01
          • 1970-01-01
          • 2013-09-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多