我有一个自定义异常扩展Exception
,但它似乎没有捕获ArrayIndexOutOfBoundsException
。但是,如果我将catch子句更改为捕获Exception
,它将按预期工作。
超类异常是否应该捕获子类异常,即使它是RuntimeException
?
以下是异常的原因:
int timeInMillis = 0;
for (int i = 0; i < commandMessage.length; i++)
for (String commandValue : command.getArguments()) {
try {
if (commandValue.equals(commandMessage[i]))
// This is causing it.
timeInMillis =
Integer.parseInt(commandMessage[i + 1]);
else
throw new CommandSyntaxException(Problems.
SYNTAX_ERROR.getProblemDescription());
} catch (CommandSyntaxException commandSyntaxException) {
System.out.println("foo");
}
}
Problems
和commandValue
是枚举。
这是我的异常类:
public class CommandSyntaxException extends Exception {
private String message;
public CommandSyntaxException(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
}
是否有任何解决方法(除了捕捉Exception
)? 我的意图是在单个catch子句中捕获我自己的异常所有异常。
答案 0 :(得分:2)
当您扩展Exception并创建CommandSyntaxException时,它将成为特定的异常。现在你试图捕获CommandSyntaxException但是没有抛出异常,而ArrayIndexOutOfBound是线程,所以它不会被捕获。 如果您的代码抛出CommandSyntaxException,那么只会捕获它。 :)
快速解决这个问题可以有三种方式。 CommandSyntaxException扩展RuntimeException 或CommandSyntaxException扩展ArrayIndexOutOfBoundException。 或者您的代码抛出CommandSyntaxException。
“我的意图是在单个catch子句中捕获我自己的异常的所有异常”: 您可以使用Catch捕获所有异常(例外e)但是使用单个catch子句捕获所有异常并不是一个好习惯。
答案 1 :(得分:1)
添加
catch (ArrayIndexOutOfBoundsException e) {
}
告诉你。
ArrayIndexOutOfBoundException
和CommandSyntaxException
是不同的异常,如果你想捕获它们,你应该分别捕获每个异常或捕获它们共同祖先的异常(Exception
)。
<强>更新强> 如果你现在想要捕获1个catch子句,你可以