gpt4 book ai didi

Java unchecked/checked 异常说明

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:24 24 4
gpt4 key购买 nike

我一直在阅读有关未检查和已检查问题的信息,没有任何在线资源真正清楚地说明两者的区别以及何时使用两者。

据我了解,它们都是在运行时抛出的,它们都表示超出逻辑预期范围的程序状态,但必须显式捕获已检查的异常,而未检查的则不会。

我的问题是,为了论证的缘故,假设我有一个除以两个数字的方法

double divide(double numerator, double denominator)
{ return numerator / denominator; }

和一个需要在某处除法的方法

void foo()
{ double a = divide(b, c); }

谁负责检查分母为零的情况,应该检查还是不检查异常(忽略 Java 的内置除法检查)?

那么,divide 方法是按原样声明还是按原样声明

double divide(double numerator, double denominator) throws DivideByZeroException
{
if(denominator == 0) throw DivideByZeroException
else ...
}

void foo()
{
try{
double a = divide(b, c);
}
catch(DivideByZeroException e)
{}
}

或者没有检查异常,原样:

double divide(double numerator, double denominator)
{
if(denominator == 0) throw DivideByZeroException
else ...
}

void foo()
{
if(c != 0)
double a = divide(b, c);
}

并允许 foo 进行除零检查?

这个问题最初出现在我编写的一个数学程序中,在该程序中用户输入数字,逻辑类执行计算。我一直不确定 GUI 是否应该立即检查不正确的值,或者内部逻辑是否应该在计算期间捕获它们并抛出异常。

最佳答案

确实是个有趣的话题!

在阅读并尝试了很多处理一般错误和特殊异常的方法后,我学会了区分程序员错误预期错误

程序员的错误不应该被发现,而应该尽早崩溃(!)。程序员的错误是由于逻辑错误引起的,应该解决根本原因。

预期的错误应该总是被捕获。此外,当捕获到预期错误时,必须为用户显示一条消息。这有一个重要的含义 - 如果预期的错误不应该显示错误,最好检查该方法是否会抛出而不是让它抛出。

所以应用到你的例子我会想“这应该如何看待用户?”

  1. 如果应该显示错误消息(在浏览器输出、控制台、消息框中),我会抛出异常并在尽可能靠近 UI 的地方捕获它并输出错误消息。
  2. 如果不应显示任何错误消息,我会检查输入而不是抛出。

旁注:我从不抛出 DivideByZeroExceptionNullPointerException - 我让 JVM 为我抛出它们。在这种情况下,您可以编写自己的异常类或使用合适的内置检查异常。

关于Java unchecked/checked 异常说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5070932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com