首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java编译时检查异常

Java编译时检查异常
EN

Stack Overflow用户
提问于 2015-09-08 17:15:30
回答 3查看 2.6K关注 0票数 4

ExceptionIOException都是编译时检查的异常。

但是,我们不能在catch块中使用IOException。但是我们可以在catch块中使用Exception,原因是什么。

代码语言:javascript
运行
复制
    import java.io.*;
    class Demo{
        public static void main(String args[]){
            try{

            }catch(IOException e){ // Does not compile

            }

            try{

            }catch(Exception e){ // Compile

            }
        }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-08 17:25:52

除了Exception (或Throwable)之外,您无法捕获从未在try块中抛出的检查异常。此行为由JLS,第11.2.3节指定。

如果一个catch子句可以捕获选中的异常类E1,则是编译时错误,而与catch子句对应的try块可以抛出E1的一个子类或超类的检查异常类,除非E1是异常或异常的超类。

票数 9
EN

Stack Overflow用户

发布于 2015-09-08 17:40:53

若要回答为什么异常块正在编译而IOException没有.仅仅因为继承自异常类的所有东西,它包含所有类型的异常,如IOException、RuntimeException等。当您指定捕获异常时,代码中没有任何东西必须将其作为运行时抛出的RuntimeException抛出,并且代码编译器无法预测其中的异常发生。但是IOException是一个特殊的异常,只有在某些情况下才会发生,因此编译器知道它何时会发生,如果它没有检测到任何可能抛出它的代码,它就不会编译。

票数 0
EN

Stack Overflow用户

发布于 2016-10-25 13:45:16

主要原因是,您可以捕获任何RuntimeException,不管它是否从try块抛出,而RuntimeException是扩展异常类本身的类。因此,作为父类,始终允许捕获“异常”。在您的例子中,IOException检查了异常,只有当您尝试具有抛出它的概率的块时,它才被允许。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32463601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档