我似乎无法正确地说出这一点,搜索引擎可以获得任何有意义的结果.
try{
BufferedReader reader = new BufferedReader( new FileReader("foo.bar") );
}
catch(Exception e){
println( e.getMessage() );
}
Run Code Online (Sandbox Code Playgroud)
所以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;
}
Run Code Online (Sandbox Code Playgroud)
Exception是所有异常的母亲,包括所有RuntimeException子类.当你指定捕获它时,你会在网中获得比你想要的更多的鱼,比如NullPointerExceptions,IllegalArgumentExceptions等等.
虽然在代码中的某些时候捕获泛型Exception 是正确的,但在任何较低层捕获它几乎肯定是错误的并且可能会损害应用程序的行为.
在Java中学习的更重要的技能不是如何捕获异常,而是如何捕获它们,而不是让它们向上传播调用堆栈,朝向异常障碍,代码中的一个常见位置,所有错误都被捕获并且统一处理(通常通过记录,回滚事务等).
区别在于你的try块代码中可能存在其他问题,这些问题可能抛出其他类型的Exceptions,包括子类RuntimeException(不必声明).
如果您只是捕获Exception,那么您将捕获所有其他错误,这可能隐藏不同的问题.此外,catch块中的代码不能假定由于IOException而发生异常,因为将捕获任何类型的异常.
| 归档时间: |
|
| 查看次数: |
1114 次 |
| 最近记录: |