我开始自学更多有关 Java 错误处理的知识,这是我的第一个程序,我尝试在其中查看特定错误,而不是使用 catch (Exception e)
作为通用捕获-all catch
.
我正在删除一个文件并返回一条消息,说明文件已成功删除或删除失败。在删除失败的情况下,如果找不到文件,我想传递一条错误消息。
这是我到目前为止的位置:
public static void deleteOldConcatFiles(File concatFile) {
try
{
if(concatFile.delete()) {
System.out.println(concatFile.getName() + " is deleted!");
} else {
System.out.println("Delete operation failed.");
}
}
//
catch(FileNotFoundException f) {
System.out.println("Exception: "+ f.getMessage().getClass().getName());
}
}
当我运行它时,我收到警告:这是 FileNotFoundException 的无法访问的 catch block 。此异常永远不会从 try 语句主体中抛出。
但是,当我使用这个 catch block 运行时,
catch(Exception f) {
System.out.println("Exception: "+e.getMessage().getClass().getName());
}
我没有收到任何错误或警告消息。
为什么会发生这种情况,我该如何解决?
最佳答案
File.delete()
不会抛出 FileNotFoundException,即使文件不存在也是如此。
FileNotFoundException 是一个已检查的异常(即,不是 RuntimeException),因此抛出它的任何代码都必须声明它。因为 File.delete()
没有声明它抛出 FileNotFoundException,编译器保证它不会,并且可以保证永远不会调用您的 catch block 。
第二个包罗万象的 block 不会生成警告,因为它还会捕获 RuntimeExceptions(RuntimeException extends Exception),编译器不会为您检查。因此,它可能会被调用,编译器不确定,所以它不会警告您。
关于java - 为什么我的 Java try...catch 会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20227668/