您好,
在Java中,如果像BufferedReader.read()
这样的方法说它可以抛出IOException
而我试图在两个catch块中捕获FileNotFoundException
和IOException
,那么catch块是什么如果文件不存在,将被输入?
它是仅输入最具体的还是两者兼而有之?
答案 0 :(得分:6)
将输入与例外匹配的第一个编码捕获 已编辑以纳入Azodius的评论
例如:
try {
bufferedReader.read();
} catch (FileNotFoundException e) {
// FileNotFoundException handled here
} catch (IOException e) {
// Other IOExceptions handled here
}
以下代码无法编译:
try {
bufferedReader.read();
} catch (IOException e) {
// All IOExceptions (and of course subclasses of IOException) handled here
} catch (FileNotFoundException e) {
// Would never enter this block, because FileNotFoundException is a IOException
}
编译器消息说:
FileNotFoundException的无法访问的catch块。它已由IOException的catch块处理
答案 1 :(得分:2)
只会遇到catch块的异常类型与抛出的异常类型匹配的第一个catch块(更具体地说,将运行(e instaceof <exception type>)==true
的第一个catch块)。其他捕获块都不会运行。
例如
try{
BufferedReader.read();
}
catch(FileNotFoundException e){System.out.println("FileNotFoundException");}
catch(IOException e){System.out.println("IOException");}
如果FileNotFoundException
抛出BufferedReader.read()
,将打印FileNotFoundException
。
请注意,以下内容实际上并未编译:
try{
BufferedReader.read();
}
catch(IOException e){System.out.println("IOException");}
catch(FileNotFoundException e){System.out.println("FileNotFoundException");}
因为Java意识到无法捕获FileNotFoundException
因为所有FileNotFoundException
也是IOException
s。
答案 2 :(得分:1)
第一个适合该类型的例外(仅限于此)。因此,如果您按照列出的顺序catch
上述两种例外类型,则会捕获FileNotFoundException
。
答案 3 :(得分:0)
首先捕获特定异常。如果特定的一般异常被捕获,则编译时错误。