【发布时间】:2017-03-26 16:03:09
【问题描述】:
public static void main(String[] args) throws IllegalArgumentException {
if (args[0].matches(".*\\w.*")) {
throw new IllegalArgumentException("Can't input characters!");
}
String input = insertSpaces(args[0]);
args = input.split("\\s+");
printAnswer(calculate(args),args);
}
在上面的代码中,main 方法抛出了一个 IllegalArgumentException。如何捕获 main 方法抛出的异常?我问的原因,如果我不正确请纠正我,因为我的理解是,当一个方法抛出异常时,方法的调用者负责捕获异常。在这种情况下,主要方法没有其他方法调用它,所以我不知道如何捕获异常。我猜 JVM 正在幕后工作以调用该方法,但是我将如何让 JVM 捕获执行。如果可能,请提供代码以及解释。否则解释为什么不可能。
【问题讨论】:
-
你不会从 main 方法中抛出异常。您要么从 main 处理它,要么直接退出程序。
-
如果
main抛出异常,JVM 默认捕获它,打印堆栈跟踪,然后关闭。 -
让我看看我是否明白。由于无效的输入最终会关闭我的程序,所以从我的 main 方法中抛出异常只是一种使其提前终止的方法,因为我无法手动捕获它?
-
为什么不在包含您的代码的主方法中添加一个 try-catch 块?这就是您想要的 - 只需自己捕获并处理它(正如@JoeC 精美指出的那样,一旦您的 main 方法抛出异常,JVM 就会关闭 - 所以最好抓住它!)
-
@Japu_D_Cret 我明白了,我将研究解决我的问题的解决方案并将其发布。