Java 异常会终止整个 java 应用程序吗?

我曾经认为,当异常发生时,整个java应用程序将被终止。例如,我写了一个测试函数来测试我的想法。

public void test(){
    File fileDir=new File(sourceDataDir);
    if(fileDir.exists()){
        File[] files = fileDir.listFiles();
        for(int index=0 ; index<files.length ; index++){
            System.out.println("index = "+index);
            File file = files[index];
            if(index == 1)//delete a file to cause a FileNotFoundException
                file.delete();
            try {
                BufferedReader in = new BufferedReader(new FileReader(file));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}

我删除了一个文件,导致手动。我曾经认为,当异常发生时,整个应用程序都会终止。但实际上,应用程序将继续读取其余文件。因此,我的问题是,在什么情况下,异常会导致整个应用程序被终止?FileNotFoundException


答案 1

如果未捕获异常,则发生异常的线程将被终止。如果没有剩余的非守护进程线程,JVM 将终止。这是异常终止 JVM 的唯一方式。如果发现异常,则永远不会导致 JVM 终止。catch


答案 2

我的问题是,在什么情况下,异常会导致整个应用程序被终止?

它永远不会。只有 System.exit() 会导致整个程序终止(以及 JVM 崩溃)

想想一个异常,就像一个强大的,可以打破方法。中断可能导致循环退出,如果最后一个循环位于唯一的非守护程序线程中,程序将退出。但它不会引起它,即使它可能是你在程序死亡之前看到的最后一件事。break;


推荐