DELOG 10.10 理解异常 & 为什么要设计CE和RE?& Kotlin中是怎么处理的?
异常的分类:

Java中的异常可以从两个方面进行分类:
1. 继承关系上:通常将RuntimeException的子类和Error类的子类称作unchecked exception。其他的称作checked exception。
2. 运行结果上:Java的异常分为checked exception和 unchecked exception。checked exception (CE)是程序预期的一部分,而unchecked exception(runtime exception,RE)却不是。
设计CE和RE的目的
CE:表示当前的函数/方法返回的结果可能存在两种,一种是正常返回的结果,一种是异常。之所以需要这样设计,是一种自然而然的合约。程序的设计者在方法签名中抛出异常(可能会发生的异常),使用这就应该做出处理。
借助知乎的这篇回答的解释:Java设计出checked exception有必要吗? - BachScript的回答 - 知乎 https://www.zhihu.com/question/30428214/answer/852807268

RE:反映的是一种意料之外的状况。但是RE也是必须的,如果不使用RE,在调用链上,调用链的上游抛出了异常,下游就需要知道如何处理,并且上下游的模块也会因为这个异常被耦合到一起。
Kotlin中是如何处理的呢?
Kotlin中都是unchecked 异常,因为总是检查异常会降低生产力,但是却没有明显提高代码质量。
而且Kotlin通过类型机制实现了更好的【类型匹配】:
如果按照上面的文章中的union type来理解,这里的a的类型应该是Int|NumberFormatException,但是Kotlin中支持try表达式,所以当真正发生异常的时候可以将a的值设为空值。
总结:
CE和RE都是Java异常机制的一部分。CE更像是一种代码规范,表示返回的结果类型要么事异常要么就是指定的返回类型。
RE在运行过程中发证的异常,也是必须的为了避免耦合性。
反正RE不能避免,而且CE没有显著提升代码质量,所以Kotlin也没有支持CE。但是在真正遇到可能出现的异常的时候,还是可以进行try-catch。
参考内容:
浅谈Kotlin的Checked Exception机制:
https://segmentfault.com/a/1190000025161951
官方文档:
https://www.kotlincn.net/docs/reference/exceptions.html