我一直在阅读有关未检查与检查问题的信息,没有任何在线资源真正清楚地说明差异以及何时使用两者。
据我了解,它们都在运行时被抛出,它们都表示超出逻辑预期范围的程序状态,但是必须显式捕获已检查的异常,而未检查的异常则不能。
我的问题是,假设为了论证,我有一个方法可以将两个数字相除
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 是否应该立即检查不正确的值,或者内部逻辑是否应该在计算期间捕获它们并抛出异常。