don*_*ton 6 java exception unchecked throw checked
我一直在阅读关于未经检查和已检查的问题,没有一个在线资源真正清楚这些差异以及何时使用两者.
根据我的理解,它们都会在运行时抛出,它们都代表超出逻辑预期范围的程序状态,但必须明确捕获已检查的异常,而未经检查的异常则不会.
我的问题是,假设为了论证我有一个方法来划分两个数字
double divide(double numerator, double denominator)
{ return numerator / denominator; }
Run Code Online (Sandbox Code Playgroud)
以及需要在某处使用divison的方法
void foo()
{ double a = divide(b, c); }
Run Code Online (Sandbox Code Playgroud)
谁负责检查分母为零的情况,是否应该检查或取消检查异常(忽略Java内置的分区检查)?
那么,除法方法是按原样还是按原样声明
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)
{}
}
Run Code Online (Sandbox Code Playgroud)
或者没有经过检查的例外,原样如下:
double divide(double numerator, double denominator)
{
if(denominator == 0) throw DivideByZeroException
else ...
}
void foo()
{
if(c != 0)
double a = divide(b, c);
}
Run Code Online (Sandbox Code Playgroud)
并允许foo通过零检查进行除法?
这个问题最初出现在我写的数学程序中,用户输入的数字和逻辑类执行计算.我不知道GUI是否应该立即检查不正确的值,或者内部逻辑是否应该在计算期间捕获它们并抛出异常.
有趣的话题确实!
在阅读并尝试了很多方法来处理一般错误和异常后,我学会了程序员错误和预期错误之间的区别.
程序员错误永远不应该被捕获,而是早期和困难地崩溃(!).程序员错误是由逻辑错误引起的,应该修复根本原因.
应始终捕获预期的错误.此外,当捕获到预期错误时,必须为用户显示一条消息.这有一个重要的含义 - 如果预期的错误不应该显示错误,最好检查方法是否会抛出而不是让它抛出.
所以应用到你的例子我会想"这应该如何看待用户?"
在阿里纳斯:我从来不扔DivideByZeroException也不是NullPointerException-我让JVM抛出那些对我来说.在这种情况下,您可以酿造自己的异常类或使用合适的内置检查异常.
| 归档时间: |
|
| 查看次数: |
3412 次 |
| 最近记录: |