Java异常处理总结

    Java程序的执行过程中如出现了异常,会自动生成一个异常类对象,该异常将被提交给Java运行时环境,这个过程称为抛出(throw)异常。

    当Java运行时环境接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。

    如果Java运行时环境找不到可以捕获异常的方法,则运行时环境将终止,相应的Java程序也将退出。如果能捕获,程序将顺序执行;

    程序通常只能处理异常(Exception),而对错误(Error)无能为力。

    Try-catch-finally处理异常:

    如果Java应用程序发生异常未得到处理,那么,程序将会在控制台(如果启动的话)输出一条包含异常类型以及异常堆栈内容的信息;如果是非图形化的应用程序,程序将中止,图形化的则不会。

    当try从句或者catch()从句中有System.exit()语句时,finally()不会被执行;否则无论try-catch中是否出现异常(包括异常是否被处理),是否有return语句等,finally()总是要执行的。

    ①try-catch型。当try抛出了由catch指定的异常,则代码在抛出异常处中止,到相应的catch()中执行。

    如果只有try-finally,那么在try中遇到异常时,Java先去执行finally,如果finally里没有异常出现,那么执行完finally后,程序会再回去处理try中的异常;如果finally中有异常,那么,不管finally中的异常的范围比try中的大还是小,都会将try中的异常覆盖。

    如果在catch中也抛出了异常,同样,程序会去检测finally中是否有异常,如果有的话,finally中的异常也会覆盖catch中的异常。

    ②通过catch来捕获多个异常时,子类异常在前,父类异常在后;如果try中也抛出了异常,那么其范围不能超出catch中的异常的范围。

    ③如果try,catch,finally中都有return语句,那么finally中的return将覆盖try-catch中的return语句。

    如果finally中有return ,break,continue,System.exit()时,将会中断未处理的异常,直接退出程序。

    如果只有try或者catch中有return,而finally中没有,则这些return和没有效果一样。

    不允许在return语句后面抛出异常或者书写代码,否则编译出错。

    ④try-catch-finally相互嵌套时,先处理最内层的try-catch-finally
       

    Throws抛出异常。在定义方法时可以将异常抛出,让调用这个方法的代码处理。

    Catch中可以通过throw来抛出自己不能处理的异常。


    方法覆盖时的异常处理:

    ①覆盖方法的异常,可以抛出与被覆盖方法的相同的异常或者被覆盖方法的异常的子类 的异常。

    ②如果父类的方法没有声明抛出异常,那么子类覆盖方法不可以声明抛出“已检查”异常(可以抛出“未检查异常”);所谓“未检查”是指Error的子类和RuntimeException的子类(数学计算异常、数组越界异常、空指针异常等),这里面的“未”字意思是编译时不报错,系统只能在运行时才能判断是否出错;其它的异常均称为“已检查”异常,在编译时就会报错的那些异常。

    ③如果父类的方法声明抛出异常(包括自定义的异常),那么子类覆盖方法可以不声明抛出异常,但是,如果子类覆盖方法要抛的话,只能抛出与被覆盖方法的相同的异常或者被覆盖方法的异常的子类 的异常,不能是其它的“已检查”异常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值