-
checked exception
是java官方文档中提过的,就是那些强迫程序员一定要处理的异常(抛出或者try-catch处理); 继承Exception
-
unchecked exception
貌似是java官方没有提到的词,但是网络上很多这个词,所以列出来。其实就是runtime exception; 继承 RuntimeException
印象中曾经读过的资料有这句话:“unchecked exception 这个词实际上是不存在于官方文档的,官方用的是runtime exception”
-
runtime exception
是官方文档提到过的词语,就是不会强迫程序员处理的,这类异常通常是难以预料或者补救措施没什么意义的,所以被设计为不强迫程序员处理。继承自 RuntimeException
checked
怎么理解
checked 这个单词是check的过去分词,应该不是过去式,虽然英语中很多动词的过去式和过去分词是一模一样的,但是做定语修饰名词的时候,似乎是没有用过去式的,一般是用过去分词。 用过去分词似乎有这样3种含义:1、被动; 2、已完成; 3、两种都有。具体什么含义还得自行理解。PS:其实英语比起更加完全的屈折语似乎歧义性是高一点
回到主体,checked
究竟是表示什么意思? 是表示 “已经完成检查了的”,还是 “被检查了的”,好像套用哪个都有点不太对劲,有些地方将checked exception
翻译为 “受检异常”,那这个checked
的意思就应该是 “(必须)受到检查的”,甚至是 “(必须)受到处理的” 的意思。
你觉得是什么含义?
其他其实checked exception被设计出来是有争议的,比如在C++里是没这个的(C++全是运行时异常),争议是什么?争议是像FileNotFoundException 这种checked exception,即使发生了又能怎么样呢?你的Java语言设计成强迫程序员处理而程序员要么抛出要么记录日志后抛出也没有什么有效的处理方式,那你强迫程序员处理并没有达到预期的目的呀? 而且try-catch的语句块真的很丑陋,像横断在连贯的、优美的代码的一块伤疤或创口贴