Exception和IOException都是编译时检查的异常。
但是,我们不能在catch块中使用IOException。但是我们可以在catch块中使用Exception,原因是什么。
import java.io.*;
class Demo{
public static void main(String args[]){
try{
}catch(IOException e){ // Does not compile
}
try{
}catch(Exception e){ // Compile
}
}
}发布于 2015-09-08 17:25:52
除了Exception (或Throwable)之外,您无法捕获从未在try块中抛出的检查异常。此行为由JLS,第11.2.3节指定。
如果一个catch子句可以捕获选中的异常类E1,则是编译时错误,而与catch子句对应的try块可以抛出E1的一个子类或超类的检查异常类,除非E1是异常或异常的超类。
发布于 2015-09-08 17:40:53
若要回答为什么异常块正在编译而IOException没有.仅仅因为继承自异常类的所有东西,它包含所有类型的异常,如IOException、RuntimeException等。当您指定捕获异常时,代码中没有任何东西必须将其作为运行时抛出的RuntimeException抛出,并且代码编译器无法预测其中的异常发生。但是IOException是一个特殊的异常,只有在某些情况下才会发生,因此编译器知道它何时会发生,如果它没有检测到任何可能抛出它的代码,它就不会编译。
发布于 2016-10-25 13:45:16
主要原因是,您可以捕获任何RuntimeException,不管它是否从try块抛出,而RuntimeException是扩展异常类本身的类。因此,作为父类,始终允许捕获“异常”。在您的例子中,IOException检查了异常,只有当您尝试具有抛出它的概率的块时,它才被允许。
https://stackoverflow.com/questions/32463601
复制相似问题