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;,可以打破方法.中断可能导致循环退出,如果唯一的非守护程序线程中的最后一个循环,程序将退出.但它并不会导致它,即使它可能是你在编程之前看到的最后一件事.
异常主要有两种类型:
表明系统工作正常。您必须捕获异常,否则无法编译。它永远不会终止应用程序。如果您想终止,则必须在 catch 块中调用 System.exit(ERROR_NUMBER) 或抛出运行时异常。
指示系统错误(例如应用程序服务器配置错误)。你不必抓住它。如果您没有捕获它,它会终止应用程序,或者如果您编写 J2EE 应用程序,AS 可能会处理它并继续您的应用程序。