java - 在java中创建自定义异常

标签 java exception

在一次采访中,我最近被问到以下问题:

是否有其他方法可以在不使用extends的情况下创建自定义Exception:

  1. 已检查异常扩展Exception类或Exception的子类
  2. 扩展RuntimeExceptionRuntimeException的子类来处理未检查异常。

可能给出的答案是什么?

最佳答案

如果不使用扩展异常类,就根本无法做到这一点。但你可以在没有显式扩展的情况下实现它......有点。

public class Test {
    public void method() {
        throw new RuntimeException() {};
    }
}

上面声明并抛出 RuntimeException 的匿名子类。

当然,这是毫无意义的事情。由于类是匿名的,因此您不能在 throws 子句中命名它,也不能在异常处理程序中按名称处理它。

另请参阅:Throw anonymous exceptions in Java

<小时/>

或者,您可以扩展 Error(Error 的子类)或 .... Throwable。但你不应该这样做。

  • 通常假定 Error 异常是由 JVM 或标准库定义和抛出的1。因此 Error 层次结构中的自定义子类(至少可以说)会令人惊讶。
  • 如果直接扩展 Throwable,则可能会破坏假定 ExceptionErrorThrowable 的唯一子类的代码
<小时/>

1 - 这不是 javadoc 所说的......但人们认为情况确实如此。

关于java - 在java中创建自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49901546/

相关文章:

java - 如何在 Service 类的 onCreate() 方法中使用 findViewById?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

java - 我们可以在java中用它自己的异常来包装异常吗

java - GemFire 条目的生存时间未使用 spring-cache 设置

iphone - 在特定时间间隔内重复报警

java - 如何从java异常中获取唯一原因

java - 如何正确忽略 Java 中的异常?

java - 在不使用 java.util.Properties 的情况下读取文件并获取 key=value

java - Spring Data Jpa - 缓存

java - 使用java列出某个url下的文件名