gpt4 book ai didi

java - 在java中如何创建一个抛出异常的方法?

转载 作者:行者123 更新时间:2023-12-02 08:49:09 25 4
gpt4 key购买 nike

我的作业说我们必须遵循这些说明来创建 throwException 方法。

抛出异常方法

  • 应该接受 Exception 对象作为其唯一参数并且不返回任何内容
  • 接受该异常并抛出它

如何创建这个方法?

到目前为止我所拥有的是:

public void throwException (Exception ex) throws Exception {
}

这是正确的吗?

最佳答案

您当前的方法涵盖了第一点 - 将异常作为参数。
如果您不从方法中抛出异常,则抛出异常是不必要的,但需要它来涵盖第二点。

正如评论者指出的,您只需要使用 throw 关键字来抛出异常,因此该方法可能如下所示:

public void throwException (Exception ex) throws Exception {
//some other code maybe?
throw ex;
}

这个实现有一个小缺陷。当null作为参数传递给它时,该方法会抛出NullPointerException,因为throw关键字接受Throwable类或其子类的对象(Exception是一个子类) Throwable)。
为了避免 NullPointerException(这是一个未经检查的异常),可以使用简单的 if 语句:

public void throwException (Exception ex) throws Exception {
if (ex != null) {
throw ex;
}
//just for presentation,below it throws new Exception
throw new Exception("ex parameter was null");
}

编辑:
正如@Slaw所建议的,在非常小的情况下,添加空检查并抛出新的异常只是掩盖了NullPointerException。如果没有 null 检查和 throw new...,NPE 将从该方法中抛出,并且当 null 传递给该方法时,其堆栈跟踪将显示 throw ex 的确切行方法。
NPE 是 RuntimeException 类的子类型,当从该方法抛出 RuntimeException 的子类型时,不需要在方法签名中显式声明它们。就像这里:

public static void throwNPE(Exception e) {
throw new NullPointerException();
}

RuntimeException 及其子类称为未检查异常。扩展 Exception 或 Throwable 类之一的其他类称为检查异常,因为如果方法抛出它们,则它必须在签名中声明该异常(或父类(super class))或显式 try catch 它。

空检查的正确使用是当该方法抛出一种更具体的异常(如 IOException 或 Exception/Throwable 的新子类)时,以及当另一个方法使用抛出该新类型的异常时异常会 try catch NPE 不会被捕获的特定类型。

为了良好的实践,在处理 try-catch 时,最好捕获抛出的异常的确切类型,而不是一般的异常/可抛出异常。它有助于理解异常的真正原因、调试和修复代码。

关于java - 在java中如何创建一个抛出异常的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60895691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com