java - 为什么我的 Java try...catch 会出错?

标签 java exception error-handling

我开始自学更多有关 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/

相关文章:

java - 删除Java字符串中的破折号并将破折号后的字符大写

java - 如何用JLabel创建定时器?

java - 关于Java异常的问题

c++ - ZMQ::send()引发异常并杀死QNX进程。为什么以及如何从中恢复?

asp.net - 关于 HttpModules 内部的错误处理,是否有任何可用的指导资源?

java - 从 jtextfield 提供数据并将它们存储到文件中

java - 连接更改时套接字不会断开连接

Python:执行一个函数来检查文件是否有后缀

exception - D中的惯用错误处理

java - 如何执行ASK查询?