关于异常概念的一个小疑惑
请帮我看下下面的两个概念有没有问题?
(1)异常,就是指程序在运行时出现不正常的情况
(2)对于异常:分两种:
1,编绎时被检测的异常(也就是说这个异常是可以被处理的)
2,编绎时不被检测的异常(运行时异常,
RuntimeException及其子类);
既然异常是运行时出现,为什么编译时检测而不是运行时检测呢?
感觉这俩概念好矛盾啊,求解。。。
------解决方案--------------------
lz,你说的异常的两种定义,在别的地方看到还比较少!
你是不是这个意思:
1,编绎时被检测的异常,如IO、
数据库异常等;
2,编绎时不被检测的异常,如
数组越界、
空指针等。
至于你的疑问“
既然异常是运行时出现,为什么编译时检测而不是运行时检测呢?”
这个编译时的检查,是非常有必要的。我们要写出更加健壮的程序,就需要更多的提示:如果能在运行前预知并解决更多的异常,那么程序就会更健壮,因为运行时出现Exception,那就会直接影响生产环境了。
所以JDK也是朝这个方向走的,像JDK1.5的泛型就是为了多加约束,减少运行时的类型转换异常。
------解决方案--------------------Java中异常分两种
一种为“检查异常”,既是说这种异常必须显示声明在接口签名中,用户代码被强迫处理这种异常。
另一种为“非检查异常”,既是说这种异常不被显示声明在接口签名中,(但是应该被写在java doc里),用户代码可以自行决定是否处理,如果不作处理,则默认继续向上层抛出。
======
关于“检查异常”,有不少争论,我个人倾向于相信“检查异常”理论上的愿望是好的,实际操作除限制了用户代码灵活度,污染了接口签名,外加被到处滥用之外,没有特别积极的意义。
另外回答你的问题,对于程序来说,异常都是运行时发生的。