我是新手,正在学习Java异常,
public void function (argument) {
if (condition) {
throw new Exception;
}
}
我的困惑是:
如果我知道这种情况会导致NullPointerException,那么我可以抛出NullPointerException。
如果代码抛出了一些我没想到的异常,或者说我不知道代码的异常是什么,我应该抛出什么?
赞这个链接 When to throw an exception? 说:“每个函数都会问一个问题。如果给出的输入使该问题成为谬论,则抛出异常。”
但是,如果输入确实使问题成为谬论,但我自己不知道该输入会导致这种谬论,我该怎么办?
还是我应该进行足够的测试以找到所有异常并将其抛出?
我知道我的问题很奇怪,但是如果您知道我在说什么,请给我一些指示。谢谢
答案 0 :(得分:1)
来源:Oracle-Java教程-“ What Is an Exception?”:
”在方法引发异常之后,运行时系统会尝试查找一些要处理的异常。处理异常的可能“事物”的集合是已被调用以到达该方法的方法的有序列表。错误发生。”。
每个不直接提供处理异常的方法的函数都会以成功的结果或未处理的异常供调用方返回给调用方。
一个可能遇到异常并能够处理它的函数避免了让调用者对其进行处理,类似地,可以处理其子例程中的异常的调用者将处理程序写入了子例程中。
如果调用方正在调用可能都遇到相同错误条件的各种子例程,则在每个子例程中重写类似代码比在每个子例程中重写类似代码会更少的代码(以及异常处理的一致性)由来电者提供。
来源:Oracle-Java教程-“ Unchecked Exceptions — The Controversy”:
“如果可以合理地期望客户端从异常中恢复,则将其设置为已检查的异常。如果客户端无法采取任何措施从异常中恢复,请将其设置为未检查的异常。”
尝试预测会发生什么 并在可能的情况下进行处理,如果它被多个被调用者重复并且让树的叶子抓住,请始终尝试让调用者来完成工作光工作”。
还是我应该进行足够的测试以找到所有异常并将其抛出?
编写测试工具可以是单独的,也可以是代码的一部分,如果它是内部的,则通常(但不总是)您希望在发行版本之外进行定义。
答案 1 :(得分:0)
我认为应该抛出异常:
如果函数不能满足既定条件
它不能满足要调用的函数的先决条件
如果这可能导致其他成员不稳定
还有其他一些情况可以考虑,但基本上对我而言,这是需要牢记的主要内容。