我在学习java异常处理时遇到了疑问,
大多数(几乎全部)示例我已经看到使用try bock发生异常,并且相应的catch在控制台中向用户输出消息,最后用于关闭/释放资源。
答案 0 :(得分:3)
不,异常处理不是打印消息或异常原因,尽管这些对于弄清楚为什么会抛出异常至关重要。
异常处理实际上更适合我们承认在程序的生命周期中会发生奇怪的事情,并且根据运行期间出现的“怪异事物”的类型,我们可以希望从中恢复。 / p>
以您的ArithmeticException
为例。这是一个例外,当应用程序的某些部分决定将某些内容除以零时,或者由于其他原因(其他类可能抛出此内容;您必须阅读文档并找出原因)时会发生这种情况。 Java决定它无法合理地从中恢复,因此抛出运行时异常,或者通常不会被捕获的异常。
我建议您查看Oracle的Exceptions Trail,因为这将为不同类型的异常提供宝贵的知识。请注意,如果您的代码中有异常,最好调查它的原因,而不是捕获它(和/或抑制它)。
答案 1 :(得分:3)
不,异常处理是针对处理,特殊情况。我想你看到的例子并不完整。将堆栈跟踪记录/打印到System.err
可能是一个好主意,但实际上并不总是必要的(尽管在尝试调试代码时非常有用),而且当然不是所有异常处理都用于。
例如,假设您有一个程序可以解析用户放入文本框的输入:
int userValue = Integer.parseInt(textBox.getText());
如果用户输入了一封信,会发生什么?那么,这是一个例外情况 - parseInt()
试图解析一个整数,那么世界上究竟是什么呢?因此,异常条件触发NumberFormatException
。在这里,处理异常的正确方法可能是提醒用户他/她的输入无效。不要弄乱所需的堆栈跟踪。
对于问题2,在尝试生成其小数表示不会结束的ArithmeticExceptions
时,您可以获得BigDecimal
:
BigDecimal a = new BigDecimal("1").divide(new BigDecimal("3"));
如果内存服务,则应该抛出ArithmeticException
...
答案 2 :(得分:2)
Java中的异常处理是关于错误管理。这是一种优雅地处理程序错误的方法。例如,您可以使用 Integer.parseInt()将String转换为整数。如果它无法解析String,则抛出NumberFormatException。在这种情况下,您可以捕获异常,默认值,并向用户显示适当的消息。而且你的程序将更加强大和优雅。
答案 3 :(得分:0)
有两种原因导致失败,我们的节目。一个是错误,另一个是例外。错误发生由于系统(内存问题)的无能。但是异常是由于编写的代码中的问题而引起的一类问题,因此程序员可以轻松地管理它们。这就是为什么作为程序员,我们应该具有异常处理知识,以便减轻程序故障。