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

wuc*_*ang 7 java multithreading jvm exception-handling exception

我曾经认为,当发生异常时,整个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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我删除了一个FileNotFoundException手动文件.我以前认为整个应用程序将在异常发生时终止.但实际上,应用程序将继续读取剩余的文件.所以,我的问题是,在什么情况下异常将导致整个应用程序被终止?

Pet*_*rey 12

我的问题是,在什么条件下,异常会导致整个申请被终止?

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

想象一个例外,就像一个强大的break;,可以打破方法.中断可能导致循环退出,如果唯一的非守护程序线程中的最后一个循环,程序将退出.但它并不会导致它,即使它可能是你在编程之前看到的最后一件事.


Hol*_*ger 8

如果未捕获异常,则将终止发生异常的线程.如果没有非守护程序线程,则JVM将终止.这是异常终止JVM的唯一方法.如果捕获异常,它将永远不会导致JVM终止.


Dav*_*tos 5

异常主要有两种类型:

  • 不是运行时异常

表明系统工作正常。您必须捕获异常,否则无法编译。它永远不会终止应用程序。如果您想终止,则必须在 catch 块中调用 System.exit(ERROR_NUMBER) 或抛出运行时异常。

  • 运行时异常

指示系统错误(例如应用程序服务器配置错误)。你不必抓住它。如果您没有捕获它,它会终止应用程序,或者如果您编写 J2EE 应用程序,AS 可能会处理它并继续您的应用程序。