java基础面试题之异常处理

六.异常处理

6.1 finally块中的代码什么时候被执行

  • finally在执行return前执行
  • 程序在执行到return时会将返回值存放在一个指定位置,再去执行finally,最后再返回,所以即时在finally中修改了返回值,返回值仍然不变,因为事先已经存放好了。这是对于基本数据类型来说,对于引用数据类型的数据来说,仍然会改变。
  • finally是否一定会执行?
    • 不一定,若在进入try语句块前就抛出了异常,就不会执行finally
    • 若执行了exit()强制结束程序,也不会执行finally

6.2 异常处理的原理是什么

  • 当程序运行时,发生了非正常情况或错误,jvm就会将出现的错误表示为一个异常并抛出,这个异常可以在catch中进行捕获,然后进行处理,异常处理的目的是提高程序的鲁棒性和安全性。
  • Throwable作为所有异常的父类,其中Error,Exception,RuntimeException都是其子类。
  • 允许程序员自定义异常

6.3 运行时异常和普通异常有什么区别

  • java有两种异常类,Error和Exception,他们有共同的父类,Throwable
    • Error属于运行期间发生了严重的错误,该错误时不可恢复的,属于JVM层次的严重错误,会导致程序终止运行,编译器不会检查Error是否被处理,因此不建议捕获Error(OurtOfMemoryError、ThreadDeath)。当这些异常发生时,JVM会选择将线程终止。
    • Exception表示可恢复的异常,编译器可以捕捉到,含两种类型,检查异常,运行时异常
  • 检查异常
    • 一种常见的异常,例如IO异常和SQL异常,这种异常发生在编译阶段,编译器强制去捕捉的异常。
    • 这种异常发生后并不会导致程序出错,处理后可继续运行,如当链接数据库失败后,可重新连接后继续操作
    • 程序以来不可靠的外部条件,如系统IO,则需要检查异常
  • 运行时异常
    • 编译器不需要强制去捕捉的异常,出现这种情况JVM会处理,常见的有空指针异常,类型转换异常,数组脚标越界异常,数组存储异常,缓冲区溢出异常,算术溢出等。
    • 出现异常后系统会向上抛,直到遇到处理代码为止。
    • 若不对异常进行处理会导致线程终止,或主程序终止
    • 需要注意的几点
      • 捕捉时,先捕捉子类异常,若先捕捉父类异常,则处理子类异常的处理代码就会失效
      • 尽早抛出异常,且能处理就处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值