使用受检异常时Java编译报错:IOException捕获块不可达问题咨询
问题解答
错误根源
Java编译器对受检异常的catch块有严格校验:
- 你try块里的
System.out.println("");完全不会抛出IOException——查一下PrintStream.println()的方法签名就知道,它根本没声明会抛出这个异常,实际执行也不可能产生这类IO错误。 - 对于受检异常,编译器要求catch块捕获的异常必须是try块真的有可能抛出的,不然就会提示“Unreachable catch block”,因为这个catch块永远没机会被执行。
为啥换成Exception就能编译
Exception是所有异常的父类,它包含了运行时异常(比如NullPointerException这类不需要显式声明的异常)。编译器默认认为任何代码都有可能抛出运行时异常,所以捕获Exception的catch块是合法的,不会触发编译错误。
怎么解决
- 如果根本不需要捕获异常,直接删掉整个try-catch块就行。
- 如果是想抓运行时异常,可以把catch块里的类型换成
RuntimeException或者具体的运行时异常类(比如NullPointerException)。 - 如果原本是想处理IO相关异常,那得在try块里加真正会抛出
IOException的代码,比如文件读写、网络请求这类操作。
内容的提问来源于stack exchange,提问作者DEV
相关产品推荐
相关产品推荐

