加入收藏 | 设为首页 | 会员中心 | 我要投稿 烟台站长网 (https://www.0535zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

人工智能的暗物质,你听说过吗?

发布时间:2021-02-11 14:18:33 所属栏目:评论 来源:互联网
导读:第三,拥有Checked Exception的Java也并不是那么安全。 有些人认为,Java中拥有Checked Exception机制,调用的每个方法你都会感到放心,因为知道它会抛出什么异常。而没有Checked Exception的话,调用任何方法心里都感觉没底。 那么这种说法有道理吗?显然这

第三,拥有Checked Exception的Java也并不是那么安全。

有些人认为,Java中拥有Checked Exception机制,调用的每个方法你都会感到放心,因为知道它会抛出什么异常。而没有Checked Exception的话,调用任何方法心里都感觉没底。

那么这种说法有道理吗?显然这不是真的。不然,你的Java程序应该永远都不会崩溃才对。

事实上,Java将所有的异常类型分成了两类:受检查异常和不受检查异常。只有受检查异常才会受到Checked Exception机制的约束,不受检查异常是不会强制要求你对异常进行捕获或抛出的。

比如说,像NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException这些都是不受检查的异常,所以你调用的方法中即使存在空指针、数组越界等异常风险,Checked Exception机制也并不会要求你进行捕获或抛出。

由此可见,即使Java拥有Checked Exception机制,也并不能向你保证你调用的每个方法都是安全的,而且我认为空指针和数组越界等异常要远比InterruptedException之类的异常更加常见,但Java并没有对此进行保护。

至于Java是如何划分哪些异常属于受检查异常,哪些属于不受检查异常,这个我也不太清楚。Java的设计团队一定有自己的一套理论依据,只不过这套理论依据看上去并没有被其他语言的设计者所认可。

因此,你大概可以理解成,Kotlin就是把异常类型进一步进行了简化,将所有异常都归为了不受检查异常,仅此而已。
 

这也是我极其不喜欢这个方法的原因,用起来就是一个字:烦。

事实上,可能绝大多数Java程序员甚至都不知道为什么要捕获这个异常,只知道编译器提醒我必须捕获。

之所以我们在调用Thread.sleep()方法时需要捕获InterruptedException,是因为如果在当前线程睡眠的过程中,我们在另外一个线程对中这个睡眠中的线程进行中断(调用thrad.interrupt()方法),那么sleep()方法会结束休眠,并抛出一个InterruptedException。这种操作是非常少见的,但是由于Checked Exception的存在,我们每个人都需要为这一个少见的操作买单:即每次调用Thread.sleep()方法时,都要写一段长长的try catch代码。

而到了Kotlin当中,你会不再讨厌使用Thread.sleep()方法,因为没有了Checked Exception,代码也变得清爽了:
 

然后当你觉得需要对这个异常进行捕获时,再对它进行捕获即可,相当于你仍然可以按照之前在Java中捕获异常的方式去编写Kotlin代码,只是没有了强制的要求,你可以自由选择要不要进行捕获和抛出。

第二,绝大多数的方法其实都是没有抛出异常的。

这是一个事实,不然你绝对不会爱上Checked Exception机制,而是会天天咒骂它。

试想一下,假如你编写的每一行代码,调用的每一个方法,都必须要对它try catch捕获一下才行,你是不是想摔键盘的心都有了?

我说的这种情况在Java中真的有一个非常典型的例子,就是Thread.sleep()方法。由于Thread.sleep()方法会抛出一个InterruptedException,所以每次我们调用这个方法时,都必须要用try catch捕获一下:

(编辑:烟台站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读