关于异常的理解

    说异常之前先谈下error,error是指jvm内部出现错误,资源耗尽等情况,程序无能为力的情况。和Exception相同点是在代码结构上都继承自Throwable,都是可抛出的。

     异常可以分为运行时异常(未检查异常)和编译时异常(已检查异常),如一个输入两个数相除,除数为0时,编译时程序并不会报错,但是在运行时就会发生异常,属于运行时异常,而在建立数据库连接时可能再编译时就会报错,发现的异常为编译时异常。在java中属于RuntimeException的子类异常都属于运行时异常,Error子类的异常也属于运行时异常,所有的Exception的直接子类异常都是属于编译时异常的。

        运行时异常在程序的编译阶段可以不用处理,而编译时异常必须需要处理的。异常的的处理有两种方式 try-catch语句块和这使用throw方式。

        try{}catch(){}语句块:将可能存在异常的语句块放到try语句块中执行,如果catch到异常,则try语句块发生异常后面的语句不会执行,直接执行catch后的语句块,对异常进行相应的处理。而没有发生异常时,执行完try语句块后直接跳过catch后面的语句块执行后面的语句。注意,可以使用多个catch语句块,包含多个异常,捕获异常的顺序为先是子异常,然后是父异常。出现异常时可以使用getMessage()和printStackTrace()方法打印异常信息。

        throw方式:throw并没有处理异常,而是交给了方法的调用者处理异常,如果都没有处理,最终交给了jvm进行处理。异常可以throw多个异常,也可以使用父类异常代替多个子类异常。在异常的处理时,如果类之间存在着继承关系,那么子类不能抛出比父类抛出更多的异常。比如,父类没有异常,那么子类就不能再抛出异常了,所以只能使用try-catch语句处理了。

        异常的传递是沿着方法的调用链反向传递的。

        通常使用finally语句块配合try-catch语句使用,用来释放资源,比如在数据库连接时,断开连接,io流操作时,关闭io流。

        另外,异常是可以自定义编写的,但是运行时异常必须继承RuntimeException,编译时异常必须继承Exception。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值