知道怎么用,但就是道理上没想通,向各位请教。java 语言为何要强制处理这类异常,这种机制的优点是?
感觉有些编译期异常应改为运行期异常,如 simpleDateFormat.parse()抛出的异常,
因为格式参数和使用对象都是程序员自己可以控制的,是可以通过程序员自己小心就能避免的。
一个基本的哲学是,如果一个错误没有被发现,那么系统会进入不可预知的状态,会产生更严重的后果,并且使得错误更难被发现,所以,一个鲁棒的系统应该尽可能早地和多地报告异常。这个哲学思想也可以叫做“故障导向安全原则”。
格式参数和使用对象都是程序员自己可以控制的,是可以通过程序员自己小心就能避免的
系统类库的编写不能只考虑你某个场景而忽略别的场景,比如你是程序员控制的,但是别的程序中这些是用户或者外界输入的,你能控制,人家不能控制。
另一方面,系统类库不能假设使用它的都是小心谨慎的程序员,再小心谨慎也会犯错误,而且明明系统类库可以做到的非要让使用它的人小心,这让用户觉得不爽。好比你买的汽车不安装任何安全装置,而对此的解释是,只要驾驶员足够小心,这些装置都是多余的,你会去买这样的车么?
Exception分为三种,Exception,RuntimeError三种。从类的角度说,后者是Exception的子类。但是根据惯例还是分开了。所以第一个实际上
指的是出去后者之后的余集。前者是checked Exception,也就是必须捕获,最后的是unchecked.之所以是unchecked,是因为那是程序员可以
可以自己避免,是程序的原因。如果无法避免,就中断程序。当然,你也可以捕获,只是编译器不会强制你捕获。但一般不要,因为不捕获有利于你debug。而前者则是无法预料的系统异常,一般是外部原因造成的。比如io流,也许是打印机有问题,,万一发生,捕获异常之后程序可以继续运行,这样程序的鲁棒性比较好。
编译器那不叫异常,叫做法。只有通过编译,才能运行。运行时发生的异常才是异常。