自定义运行时异常

Cha*_*han 4 java custom-exceptions

所以这是关于我最近被问到的面试问题.面试官通过询问我们如何创建自定义异常来开始这一点.在回答这个问题时,他问我如何创建RunTimeExceptions.我说我们创建它们的方式与创建选中的Exceptions相同.我们的自定义异常将从RunTimeException类扩展.然后他问你在什么情况下会创建自己的RunTimeException.现在我想不出一个好的答案.在我的所有项目中,我们都创建了自定义RunTimeExceptions.

我还认为我们永远不应该创建RunTimeExceptions.JVM只能以有限的方式失败,并且可以很好地处理它们.在编写应用程序时,我们无法预测可能发生的运行时异常,因此我们不需要处理它们.如果我们可以预测这些条件,那么它们就不是RunTimeExceptions.由于我们既不需要新的运行时异常,也不需要处理runtimeexceptions,为什么我们需要创建自定义的RunTimeException.我们可以预先考虑作为可能的失败条件的所有内容都应该在编译时处理,这将是一个经过检查的异常.对?只有在编译时无法处理的事物和依赖于运行时事物的事物才会进入RunTimeExceptions类别.

即使我们编写自定义RunTimeExceptions然后应该抛出RunTimeException的自定义方法 - 我们如何确保该方法将抛出该特定的RunTimeException.我们如何进行映射.这对我来说似乎不太可能.

我在这里遗漏了什么/很多东西吗?好心劝告.

谢谢,陈.

das*_*ght 6

我认为面试官试图了解你是否理解运行时异常的目的,即发出程序员错误的信号(而不是应用程序异常,这表示执行环境存在问题).

您可以并且应该RuntimeException在方法需要发出相当于编程错误的条件时创建子类,并且需要提供有关异常描述的错误的其他信息.

例如,考虑一个允许您将数据存储在稀疏多维数组中的类.这类可能提供的API之一是获取一系列索引的getter.索引的数量需要等于数组中的维数,并且每个索引必须在其范围内.提供具有不正确数量的元素的数组参数,或者在其边界外具有一个或多个元素的数组参数是编程错误.您需要通过运行时异常发出信号.如果你想发出这个错误的信号,并提供一个错误的完整帐户,你的子类IllegalArgumentException,它的子类RuntimeException,来构建你自己的异常.

最后,当您想要子类RuntimeException时,还有一种情况:当您应该提供"常规"异常时,但您不希望用户在try/ catch块中包装API的每次调用.在这种情况下,您可以替换单个方法

void performOperation() throws CustomApplicationException;
Run Code Online (Sandbox Code Playgroud)

用一对方法

boolean canPerformOperation();
void performOperation();
Run Code Online (Sandbox Code Playgroud)

第一种方法告诉调用者在当前状态下调用第二种方法是安全的.它永远不会抛出异常.

第二种方法仅在第一种方法返回时的状态下失败false,使失败成为编程错误,从而证明使用RuntimeException这种失败的信号是合理的.