使用try catch添加throws声明或环绕声

时间:2014-12-17 20:22:43

标签: java try-catch

我有一个非常简单的程序来读取文件。 eclipse要求我添加throws声明或环绕try catch。哪一个是“适当的”。如果我已经尝试了方法级别的捕获,为什么我必须拥有其中任何一个?

public static void main(String[] args) throws IOException {
    String filepath  = "xxxxx";
    readFile(filepath);


}
OR

 public static void main(String[] args)   {
    String filepath  = "xxxxx";
    try {
        readFile(filepath);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}


private static void readFile(String path) throws IOException {

    BufferedReader br = new BufferedReader(new FileReader(path));
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            //do something
        }
    } finally {
        br.close();
    }

}

4 个答案:

答案 0 :(得分:2)

最简单的答案通常是最好的:

如果是您的程序逻辑>请使用try/catch最高的来电者。

如果是供应方式或库,请使用throws>只是众多的一步。

对于库,您可能还希望围绕所获得的库包装特定于库的异常。

最好是查看有关例外的Oracle文档页面: http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html

答案 1 :(得分:2)

重新抛出try / catch的原因是你希望Exception冒泡堆栈并从调用方法处理它。当您想在那里处理try / catch时,可以使用Exception。对于像你这样的简单例子,try / catch就足够了。

E.G。但是,如果你有一个Web应用程序,你可能希望优雅地处理Exception并在方法调用中冒泡它,以便用户在网页上得到一个有意义的错误消息。

答案 2 :(得分:1)

哪一个是正确的取决于你的程序。如果您选择throws,则必须在使用该方法的地方处理异常(或让它冒泡以处理其他地方)。

如果您选择使用try/catch进行此操作,则方法本身将在出现问题时处理异常。

您收到邮件的原因可能是因为您实际上并未在方法级别捕获异常。由于您只做try/finally

我会在你的情况下使用try / catch。

答案 3 :(得分:0)

这取决于,如果你决定抛出异常,你必须在更高的层次上照顾她。

它要求你添加它,因为try / catch之外的这一行可能会引发异常:

BufferedReader br = new BufferedReader(new FileReader(path));