在 Java 中引发多个异常
有没有办法在java中抛出多个异常?
方法可以引发几个异常之一。例如:
public void dosomething() throws IOException, AWTException {
// ....
}
这表示该方法最终可能会引发这两个异常之一(以及任何未经检查的异常)。你不能(在Java或任何语言的AFAIK中)同时抛出两个异常,这没有多大意义。
还可以抛出嵌套的 Exception,该 Exception 包含在另一个异常对象中。但这很难算作“抛出两个异常”,它只是表示由两个异常对象(通常来自不同层)描述的单个异常情况。
不能引发两个异常。也就是说,你不能做这样的事情:
try {
throw new IllegalArgumentException(), new NullPointerException();
} catch (IllegalArgumentException iae) {
// ...
} catch (NullPointerException npe) {
// ...
}
您可以使用原因构造函数嵌套异常以执行以下操作:
try {
Exception ex1 = new NullPointerException();
// Throw an IllegalArgumentException that "wraps" ex1
throw new IllegalArgumentException(ex1);
} catch (IllegalArgumentException iae) {
// handle illegal argument...
throw iae.getCause(); // throws the cause (the NullPointerException)
}
关于链式异常的好文章:编程。指南:链式异常
一个异常可以禁止显示另一个异常。
try {
Exception ex1 = new NullPointerException();
// Throw an IllegalArgumentException that "suppresses" ex1
IllegalArgumentException ex2 = new IllegalArgumentException();
ex2.addSuppressed(ex1);
throw ex2;
} catch (IllegalArgumentException iae) {
// handle illegal argument...
... iae.getSuppressed() ... // get hold of the suppressed exceptions
}
有关已抑制异常的好文章:编程。指南:已抑制的异常