Java Exception相关问题总结

Exception疑问及解答

  1. 在方法中throw 异常,一定在方法上声明吗?什么场景下不需要声明
    这个问题出现的问题是,我实现的一个方法是耗时操作,所以限制在UI主线程中操作,避免出现ANR,所以在方法中,如果判断当前是主线程,则直接抛出IllegalThreadStateException,但是review 代码的时候,Commiter 要求我在方法声明的后面加上throws IllegalThreadStateException的声明,所以我重新分析和验证了下其中的必要性,结果是:不必要
        if (Looper.getMainLooper() == Looper.myLooper()) {
            throw new IllegalThreadStateException("not support executor in MainThred");
        }

原因如下

  • 我抛出的是unChecked的异常,即使是在方法增加了throws声明,也不要强制要求调用方去处理(那基本等于调用方不会主动去处理)
  • 而且Java 规范也没有要求throw uncheckedException 需要在方法上声明,没有要求就没有必要多次一举
    额外说明
  • unChecked异常本来就不建议去捕获处理,因为这个就是应该在coding 过程中避免的。直接抛出来反而要求coder避免在主线程中调用此方法。
  1. 被调用方法抛出异常,调用者一定要进行处理吗?处理方法有哪些?
  • checkedException 在方法中throw XXXException 抛出的话是一定要在方法中通过 throws XXXException 声明的,并且调用方也必要处理。但是unCheckException 调用者不一定要主动去处理,即使主动去处理也无法将程序恢复,并且应该在coding 过程中主要去避免这类异常的出现。比如我们常见的outOfIndexException、nullException
  • 处理方法一般有两法,一种是抛给上层调用者去处理,二是自己捕获去处理
  1. 如何区分unCheckException 和checkedException?
  • 我们可以从Exception的继承关系上说明如何区分未受检异常和受检异常:继承自RuntimeException 的异常是unCheckedException,是应该避免出现并且不需要主动处理的,其他的则是CheckException,需要调用方主动去处理的。比如IOException

在这里插入图片描述
参考资料
https://blog.csdn.net/hhy62011980/article/details/5548278

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值