我似乎无法用正确的措辞来让搜索引擎获取任何有意义的结果。
try{
BufferedReader reader = new BufferedReader( new FileReader("foo.bar") );
}
catch(Exception e){
println( e.getMessage() );
}
所以 FileReader
只抛出 FileNotFoundException
,据我了解这是一个 IOException
,这是一个异常。有人可以解释为什么我会捕获 FileNotFoundException
或 IOException
而不是只指定通用“异常”而不必导入异常(即导入 java.io. FileNotFoundException;)
?严格来说是为了可读性吗?
我使用所有三个名称都捕获了异常,但我找不到区别。
编辑:--------------------
private BufferedReader askUserForFile(String prompt){
BufferedReader rd = null;
while(rd == null){
try{
String filename = readLine(prompt);
rd = new BufferedReader( new FileReader(filename) );
}
catch(Exception e){
println(e.getMessage());
}
}
return rd;
}
最佳答案
Exception
是所有异常之母,包括所有 RuntimeException
子类。当您指定要捕获它时,您会在网中得到比您想要的更多的鱼,例如 NullPointerException
、IllegalArgumentException
等等。
虽然捕获通用Exception
在代码中的某个时刻是正确的,但在任何较低层捕获它几乎肯定是错误的并且会损害行为您的应用程序。
在 Java 中学习更重要的技能不是如何捕获异常,而是如何不捕获它们,而是让它们向上传播调用堆栈,朝向异常屏障,代码中的一个常见位置,所有错误都被捕获并统一处理(通常通过日志记录、回滚事务等)。
关于java - 为什么在捕获时使用 IOexception 而不是 Exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644559/