如何评估例外情况?我的意思是:
try{
catch(Exception ex){
if(ex == IOException){ //Error
System.out.println("IOException caught: " + ex.toString());
}
else if(){
}
....
}
我知道还有其他方法可以实现这一目标。我只是想知道是否可以比较Exception
" ex"定义Exception
,例如IOException
。
答案 0 :(得分:4)
最佳做法是为您需要捕获的每个catch
添加不同的Exception
语句,以反向类层次结构顺序(从更窄到更宽)。
try {
// TODO
}
catch(IOException ioe) {
}
catch(Exception e) {
}
否则,您始终可以使用instanceof
。
catch(Exception ex) {
if (ex instanceof IOException) {
}
}
备注强>
catch (IOException | PatternSyntaxException ex)
。正如Codebender提到的那样,您可以使用以下习语来匹配确切的类,而不是使用instanceof
:
if (ex.getClass().equals(IOException.class))
。
instanceof
关键字比完全类比较更强大,但可能执行速度较慢。
例如,new FileNotFoundException() instanceof IOException
会返回true
,因为FileNotFoundException
是IOException
的子类。
答案 1 :(得分:0)
您可以使用instanceof
运算符。但请记住,您将从最具体到最一般的检查。
因为FileNotFoundException也是IOException。
try{
//do stuff
}catch(Exception ex){
if(ex instanceof FileNotFoundException){
System.out.println("FileNotFoundException caught: " + ex.toString());
}else if(ex instanceof IOException){
System.out.println("IOException caught: " + ex.toString());
}
}
但是更清洁的解决方案将是
try{
//do stuff
}catch(IOException ioe){
//handle IOException
}catch(Exception e){
//handle Exception
}