需要捕获异常和异常

The need to catch IOExceptions & Exceptions

如果使用扫描仪对象读取 txt 文件的程序只产生 FileNotFoundException,是否应该始终捕获 IOException/Exception?

这样的额外代码是不需要的还是重要的?

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class TestingScanner {
    public TestingScanner() {
        readFile("dummy.txt");
    }

    public void readFile(String filePath) {
        File file = new File(filePath);
        Scanner scanner = null;

        try {
            scanner = new Scanner(file);

            while (scanner.hasNext()) {
                String line = scanner.nextLine();
                if (line.matches("^.+@yahoo\.com?(\.uk)?$"))
                    System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            System.out.println("ERROR: Couldn't Load in " + filePath);
            e.printStackTrace();
        } finally {
            if (scanner != null)
                scanner.close();
        }
    }
}

是的,我们必须始终捕获 IO 异常。由于IO与读写文件有关,所以总是有可能由于各种原因(输入路径错误,资源不可用,网络故障)而失败。

捕获到异常后,我们应该始终记录异常。 在大型项目中,这些 异常日志有助于确定某些功能故障的实际原因

您可以改用 throws Exception,但建议您使用 try/catch,因为您可以告诉您的程序在出错时该怎么做。是的,如果出现错误,有必要有例外。

我的经验法则是广泛使用异常捕获(捕获异常或可抛出),除非有特定的事情我想针对特定的异常做不同的事情。

例如,如果一个方法抛出两个不同的异常,而我将同时处理这两个异常,那么我将只捕获异常。但是如果我以不同的方式处理它们,那么我会单独捕获每个并相应地处理它们。

这种方法的关键是 "what about RuntimeExceptions"。一种思想流派是允许 RuntimeExceptions 冒泡。但我发现,在我捕获异常的情况下,我想要所有异常......有时甚至是 Throwables(我曾因为只捕获异常而不是 Throwable 而被烧毁)。

这里有一些例子:

public void myMethod() throws IOException, FileNotFoundException ();

在我不想让异常冒泡的情况下(需要处理所有异常)

try{
   myMethod();
catch(Exception e) {
//handle it
}

在我捕获异常并需要为 FileNotFound 做一些不同的事情的情况下。

try{
   myMethod();
catch(FileNotFoundException  fe){
    //handle file not found
}
catch(Exception e) {
    //handle it
}

在我让异常冒泡的情况下,因为我知道链的更上层一些非常酷的异常处理代码正在处理它,我想避免多次记录异常:

myMethod();

在我让异常冒泡的情况下,FileNotFound 除外。

try{
   myMethod();
catch(FileNotFoundException  fe){
    //handle file not found
}