我有一个非常简单的程序来读取文件。 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();
}
}
答案 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));