java - 我应该抛出什么异常

标签 java exception

我是一个新手,正在学习Java异常,

public void function (argument) {
     if (condition) {
        throw new Exception;
     }
}

我的困惑是:

如果我知道这种情况会导致 NullPointerException,那么我可以抛出 NullPointerException。

如果代码抛出一些我没有预料到的异常,或者说我不知道​​我的代码的异常是什么,我应该抛出什么?

喜欢这个链接 When to throw an exception? 说:“每个函数都会提出一个问题。如果给出的输入使该问题成为谬误,则抛出异常。”

但是如果输入确实使一个问题成为谬误,但我自己不知道这个输入会导致这个谬误,我应该抛出什么?

或者我应该运行足够的测试来查找所有异常并抛出它们?

我知道我的问题很奇怪,但如果你知道我在说什么,请给我一些指示。谢谢

最佳答案

来源:Oracle - Java 教程 - “What Is an Exception?”:

"After a method throws an exception, the runtime system attempts to find something to handle it. The set of possible "somethings" to handle the exception is the ordered list of methods that had been called to get to the method where the error occurred.".

每个不直接提供处理异常的方法的函数都会返回给调用者,并返回一个成功的结果或一个未处理的异常供调用者处理。

可能遇到异常并能够处理异常的函数可以避免调用者处理它,类似地,可以处理其子例程中的异常的调用者也无需在子例程中编写处理程序。

如果调用者正在调用可能都遇到相同错误条件的各种子例程,那么在调用者中处理它会导致更少的代码(并且异常处理的一致性),而不是在每个子例程中重写类似的代码,这会更好地处理由调用者调用。

来源:Oracle - Java 教程 - “Unchecked Exceptions — The Controversy”:

"If a client can reasonably be expected to recover from an exception, make it a checked exception. If a client cannot do anything to recover from the exception, make it an unchecked exception.".

尝试预测可能发生的情况,如果可能的话进行处理,如果在多个被调用者中重复工作,并且让“树的叶子”捕获,则始终尝试让调用者完成工作轻松的工作。

Or I should run enough test to find all exceptions and throw them?

编写测试工具可以是独立的,也可以是代码的一部分,如果它是内部的,那么通常(但并非总是)您希望在发布版本之外定义它。

关于java - 我应该抛出什么异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52032171/

相关文章:

java - 如何使用 webdriver、testng 编写测试来检查浏览器向下滚动?

java - token ";"上的语法错误,{ 应在随机字符串创建者中的此 token 之后

javascript - Jasmine javaScript 异常

java - 读取 .xls 和 .xlsx 格式的 excel 文件时出现 jxl.read.biff.BiffException 异常

ruby - 传递状态异常

java - 对单个线程使用 sleep()

java - 如何避免在不同手机上多次安装基于j2me的应用程序?

java - 使用java识别硬件设备

java - 检测 Java 异常的责任变量

android - 如果应用程序在 Android 中崩溃,如何解决该问题?