微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java未经检查/检查异常澄清

我一直在阅读关于未经检查和已检查的问题,没有一个在线资源真正清楚这些差异以及何时使用两者.

根据我的理解,它们都会在运行时抛出,它们都代表超出逻辑预期范围的程序状态,但必须明确捕获已检查的异常,而未经检查的异常则不会.

我的问题是,假设为了论证我有一个方法来划分两个数字

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

以及需要在某处使用divison的方法

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

谁负责检查分母为零的情况,是否应该检查或取消检查异常(忽略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)
    {}
}

或者没有经过检查的例外,原样如下:

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

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

并允许foo通过零检查进行除法?

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

解决方法

有趣的话题确实!

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

程序员错误永远不应该被捕获,而是早期和困难地崩溃(!).程序员错误是由逻辑错误引起的,应该修复根本原因.

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

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

>如果应该显示错误消息(在浏览器输出,控制台,消息框中),我会抛出一个异常,并尽可能靠近UI捕获它并输出错误消息.
>如果不显示错误信息,我会检查输入而不是抛出.

旁注:我从不抛出DivideByZeroException或NullPointerException – 我让JVM为我抛出这些东西.在这种情况下,您可以酿造自己的异常类或使用合适的内置检查异常.

原文地址:https://www.jb51.cc/java/120788.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐