Java Exception

本文详细介绍了Java中的Error与Exception的区别,探讨了throw与throws的作用及使用场景,并深入讲解了受检异常与非受检异常的概念。此外,还讨论了try、catch、finally的执行流程,以及如何合理地组织异常处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.什么是Error

Error是指严重的系统错误,一般指与JVM相关的问题,如系统崩溃,JVM出错,动态链接失败,内存耗尽等。这类错误无法恢复或不可捕捉,将应用程序中断。

2.什么是Exception

异常是程序运行期间对例外情况(非正常情况)的处理方式。异常的作用是从错误中恢复信息,列出异常信息,对问题进行处理。

发生异常时,异常对象被自动提交给JVM,JVM寻找处理这一异常的方法,称为捕捉异常。如果找不到可又捕捉异常的方法,则应用系统中断,java程序退出。

  • 检查性异常:java.lang.Exception

    具体应用负担的责任。

  • 运行期异常:java.lang.RuntimeException

    程序负担的责任。

  • 错误:java.lang.Error

    JVM负担的责任。

     

    3.throw 和 throws

    throws声明。如何得知方法会抛出异常,方法声明中有throws语句。

    throw抛出异常。

    4.抛出与捕捉

    编写可能会抛出异常的方法时,必须声明异常。

    调用可能会抛出异常的方法时,必须捕捉异常。

    处理异常情况:把调用放在try/catch块中,将异常处理/恢复程序放在catch块中。

     

    5.受检异常

    受检异常是程序运行时由外界因素造成的。

    编译器会检查除RuntimeException外的异常。确定调用者了解调用的方法是有异常的。如ClassNotFoundException,FileNotFoundException,IOException,SQLException.

    6.非受检异常RuntimeException

    非受检异大部分是由于程序逻辑造成的,程序员应该积极避免。如ClassCastException,ArrayIndexOutOfBoundsException,NullPointerException,ArithmeticException(除0异常)。

    7.try、catch、finally

    程序正常运行时,执行try块中的内容,不执行catch的内容。

    程序某行发生异常时,其后的程序不再执行,而执行catch块。

    finally是无论发生异常与否都会执行。如果try/catch中有return指令,finally还是会执行,流程会跳到finally再回到return语句。

    8.多重异常

    发生哪种类型的异常,执行哪个异常块。如发生B类异常,则执行b。

    如果发生B类异常,e会不会执行?不会,JVM从头开始找到符合的catch块,找到后就会知道其余的都是没用的。

    try{
    ...

    }catch(AException a){

    ...
    }catch(BException b){

    ...
    }catch(Exception e){

    ...
    }

    9.异常的多态

    异常也是对象,可以以异常的父类型来声明抛出的异常。比如,上述例子中可以只有最后一个catch块。

    什么时候用多态呢?如果两种异常的处理方式不同,则分开写,这样更容易知道发生的是哪种异常。如果两种异常处理方式相同,则可以用多态声明父类异常。

    10.duck 声明

    当A调用的方法B有异常时,可以选择不去catch,而把异常duck掉让调用A方法的C去catch。也就是不处理异常,一直往上抛,但是当main方法也不去catch这些异常(也就是直接duck掉)时,jvm只好中断。

  •  

    http://lavasoft.blog.51cto.com/62575/18920/转:

    1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。
    2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。
    3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。
    4、不要把自己能处理的异常抛给别人。
    5、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值