很多同学看到Throwable以able结尾,就以为Throwable是接口,其实Throwable是个类。
此时就会有同学有这样的疑问,那为什么不将Throwable类直接设置为接口呢?
首先,以able结尾大多数时候确实用来表示接口,但说到底,这不过是一个约定,而不是语法要求,所以,并不能100%地认为以able结尾的都是接口。
其次,我们会发现Java的异常机制里面是没有接口的,它的顶层类就是Throwable类。也就是说,你要定义一个异常类,就必须继承另一个异常类,因为catch子句要求它必须捕获一个异常,而不是任意对象。
注意:Javascript就没有这个要求,因此你可以捕获任何对象作为异常。
既然自定义的异常必须要继承另一个异常类,那么它就不能再继承别的类,这样就在很大程度上限制了异常类的用途,从而更有利于开发设计良好的程序。
例如:假设Throwable是一个接口,那么任何一个类都可以实现它,然后作为异常用catch来捕获,这就有点像Javascript的情况,违反了单一职责原则。所以,现在Javascript也建议程序员尽量用专门的异常对象,而不是字符串,这样会让程序更明确。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程