什么';从Java程序的主方法引发异常的意义是什么?

什么';从Java程序的主方法引发异常的意义是什么?,java,exception,main,Java,Exception,Main,从Java程序的主方法中抛出异常有什么意义, 因为它永远不会被任何调用方法捕获和处理 下面这句话真的没有道理,对吗 public static void main(String[] args) throws ReconToolException { parseCmdArgs(args); try { CSVSingleton.tryToReadBothFiles(FILE1_PATH, FILE2_PATH); } catch (Exception

从Java程序的主方法中抛出异常有什么意义, 因为它永远不会被任何调用方法捕获和处理

下面这句话真的没有道理,对吗

public static void main(String[] args) throws ReconToolException {

    parseCmdArgs(args); 

    try {
        CSVSingleton.tryToReadBothFiles(FILE1_PATH, FILE2_PATH);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(0);
    }

    run();

}
最好是:

public static void main(String[] args) {

        parseCmdArgs(args); 

        try {
            CSVSingleton.tryToReadBothFiles(FILE1_PATH, FILE2_PATH);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(0);
        }

        try {
            run();
        } catch (ReconToolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

Java应该阻止我们做前者吗?或者,在更复杂的框架中,main方法能够在链的更上层抛出异常?

不仅可以捕获抛出的异常,而且还可以捕获来自tryToReadBothFiles的异常


如果您询问为什么main方法上有一个'throws'关键字,我会假设parseCmdArgs可以抛出ReconToolException,并且这个main的编写者知道它永远不会被抛出,或者不想处理它。为了使程序能够编译,他必须做两件事之一:为异常添加“catch”,或向main添加“throws”。如果程序无论如何都要终止,他做什么都不重要。添加“throws”的工作量更少。

main()
引发异常将打印stacktrace,而无需任何额外代码。这意味着两个示例的行为是相同的。第一个问题是打字少了很多。是什么让你觉得它没有被抓到?jre本身就抓住了它。而且它是一个公共方法,任何其他代码都可以包装它、调用它并捕获它。不……你不能围绕主方法包装代码!你说它被抓住了,但它没有被抓住。对吗?TryToReadBothFile的异常被捕获。parseCmdArgs中的异常不存在。因为我不知道你说的是哪一个,所以我两个都讲了。对,所以我想你可能没有认识到我的问题,那就是从主方法(Java程序的入口点)抛出异常有什么意义,因为没有什么可以捕捉到它。这应该是不允许的。它在第二段。
你永远不能确定
实际上你可以确定。如果文档说明了什么时候会抛出异常,并且您在调用它之前进行了检查,那么它只会在方法出现错误时抛出异常。在这种情况下,您无论如何都无法处理错误。在某些程序中,您只是想在某些异常情况下崩溃。既然可以让JVM为您处理,为什么还要自己处理呢?