同时捕获java异常FileNotFound和IOException
FileNotFoundException是IOException的“子异常”吗 这是我在给定路径打开文件输入流的代码:同时捕获java异常FileNotFound和IOException,java,ioexception,filenotfoundexception,Java,Ioexception,Filenotfoundexception,FileNotFoundException是IOException的“子异常”吗 这是我在给定路径打开文件输入流的代码: method(){ FileInputStream fs; try { fs = new FileInputStream(path); // fs.close(); } catch (FileNotFoundException e) {
method(){
FileInputStream fs;
try {
fs = new FileInputStream(path);
//
fs.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
为什么我可以忽略FileNotFound而只捕获IOException呢?
FNFException是IOException的一部分吗
如果我在方法中抛出IOException,而不是捕获异常,该怎么办
method() throws IOException{
FileInputStream fs;
fs = new FileInputStream(path);
//
fs.close();
}
我是否可以继续在调用方法处捕获FileNotFoundException,如下所示
try {
method();
}catch (FileNotFoundException e1) {}
感谢您可能提供的任何帮助 是的
如果查看继承FileNotFoundException
是IOException
的一个子类。通过捕获超级类,您还可以捕获扩展它的任何内容
如果需要以不同的方式处理,您可以像第一个示例中那样首先捕获更具体的一个。是的,如所示,FileNotFoundException
是IOException
的子类
如果您确实想要FileNotFoundException
,则必须仅捕获此执行选项,否则捕获IOException
也将捕获对其进行子类化的任何异常,如FileNotFoundException
任何其他异常
FileNotFoundException是IOException的“子异常”吗
是,扩展IOException
:
为什么我可以忽略FileNotFound而只捕获IOException呢
捕获正在抛出的异常的基类将捕获该异常,除非有更具体的catch
子句可用
我是否可以继续在调用方法处捕获FileNotFoundException,如下所示
try {
method();
}catch (FileNotFoundException e1) {}
绝对是!事实上,这是一件好事:您的代码应该只处理它知道如何处理的异常,并让所有其他异常传播到可以更好地处理的地方。从Java 7开始,您可以做:
catch(ExceptionType1 | ExceptionType2 e)
执行多个异常捕获。但是,在您的情况下,您可以按照您的建议捕获IOException
FileNotFoundException是IOException的“子异常”吗
如果我在方法中抛出IOException,而不是捕获异常,该怎么办
你可以这样做。当一个方法抛出一个expetion时,它可以抛出这个异常或者任何继承它的异常
我是否可以继续在调用方法处捕获FileNotFoundException,如下所示
try {
method();
}catch (FileNotFoundException e1) {}
对。如果一个方法声明抛出a
,如果B
继承a
(即使B
不是由a
明确抛出),则可以捕获B
旁注:
- 您没有正确关闭资源李>
- 如果您使用Java7,请改用新文件API
块中尝试.close()
;如果您可以成功打开文件,但无法从中读取或执行其他操作,则不会调用.close()
。你应该做:
FileInputStream in = ...;
try {
// operate on "in"
} finally {
in.close();
}
对于Java 7:
try (
FileInputStream in = ...;
) {
// operate on "in"
}
// "in" is closed for you here
这是真的,但在这种情况下,这只是一种转移注意力的手段。当一个异常类型扩展另一个异常类型时,您不需要捕获完全不同的异常类型。在我的注释之后修改答案:-)