如何捕获java中主方法引发的异常?

如何捕获java中主方法引发的异常?,java,exception-handling,Java,Exception Handling,在上面的代码中,main方法抛出IllegalArgumentException。如何捕获从main方法引发的异常?我问的原因是,如果我不正确,请纠正我,因为我的理解是,当一个方法抛出异常时,该方法的调用方负责捕获异常。本例中的main方法没有其他方法调用它,因此我不知道如何捕获异常。我猜JVM正在幕后工作以调用该方法,但是我如何让JVM捕获执行选项呢。如果可能,请提供代码以及解释。否则,请解释为什么不可能。最佳做法是在main方法调用中避免它们,并对其进行处理,向用户显示关于发生了什么的有意义

在上面的代码中,main方法抛出IllegalArgumentException。如何捕获从main方法引发的异常?我问的原因是,如果我不正确,请纠正我,因为我的理解是,当一个方法抛出异常时,该方法的调用方负责捕获异常。本例中的main方法没有其他方法调用它,因此我不知道如何捕获异常。我猜JVM正在幕后工作以调用该方法,但是我如何让JVM捕获执行选项呢。如果可能,请提供代码以及解释。否则,请解释为什么不可能。

最佳做法是在
main
方法调用中避免它们,并对其进行处理,向用户显示关于发生了什么的有意义消息,并决定继续或终止。
正如JoeC提到的,您可以让它抛出,这样JVM将处理,用户或调用方将看到堆栈跟踪。当您做出这样的决定时(在main上使用throws),就是您对异常无能为力的时刻。i、 e.您收到的文件名为arg,但文件不存在。如果您不记录到外部资源,您可能希望让JVM打印stacktrace永远不要从
main
方法抛出异常

永远不要让
main
方法因异常而崩溃

IllegalArgumentException
与任何运行时异常一样,都是程序员出错的结果。把你搞砸的东西修好


不要捕获它,防止它。

您不会从主方法引发异常。您可以从main处理它,也可以直接退出程序。如果
main
抛出异常,JVM默认会捕获它,打印堆栈跟踪,然后关闭。让我看看是否理解。由于无效输入最终会关闭我的程序,因此从我的主方法引发异常只是使其提前终止的一种方法,因为我无法手动捕获它?为什么不在包含代码的主方法中添加一个try-catch块?这就是你想要的——自己捕获并处理它(正如@JoeC漂亮地指出的,一旦你的主方法抛出异常,JVM就会关闭——所以最好捕获它!)@Japu_D_Cret我明白了,我将制定一个解决方案,解决我的问题并发布它。在这种情况下,我不得不反对。你说IllegalArgumentException是程序员的结果。在这种情况下,不是程序员的用户正在为程序输入值。程序员的工作是通过指导用户如何正确使用程序来确保程序正常运行,即使用户弄糟了程序,而不是程序突然结束。程序员因此使程序具有适应性和灵活性。在这种情况下,OP不正确地使用异常,因为它不代表程序员的混乱。从
main
“指导用户如何正确使用程序,即使用户出错而不是程序突然结束”,以何种方式引发运行时异常?
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);
}