Java为啥将异常分为受检的和运行时异常这样分的依据和好处是啥

我理解,受检的异常在编译的时候就会检查,是你对使用你这个method函数的一个定义,就是对引用这个函数的说,你引用这个函数,我会告诉你,我这里处理不了这个异常,可能你会有更多的信息,可以针对当时的业务逻辑来处理这个异常,或者你也不知道怎么处理,那你就继续往上抛,比如你说的FileNotFoundException,FileInputStream不知道怎么处理,但你用FileInputStream,你可以决定找不到文件有没有影响我的业务逻辑,我是能继续呢,还是继续往上抛出运行异常就是程序错误,无法在继续下去,最多的就是NullPointerException,对象已经是空的了,程序还怎么往下跑
■网友
首先要明白,我们根据Javac对异常的处理要求,将异常类分为2类。
非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。
所以如果愿意,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。
如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。
【Java为啥将异常分为受检的和运行时异常这样分的依据和好处是啥】 检查异常(checked exception):除了Error 和 RuntimeException的其它异常。
javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。
这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。
上面的内容,重点想想标粗部分,你的疑问就应该解决了。

■网友
没一点的好处!说白了,这就是个语言设计的经典败笔。
抛出受检异常需要方法上声明,而这个做法在底层实现变更时候会直接破坏方法签名导致版本不兼容问题。
并且由于受检异常的恶心特性导致大多数开发人员都使用RuntimeException包装,使受检异常失去了原有设计的目的。
所以,建议所有自定义异常均使用RuntimeException的子类定义,避免不必要的麻烦。

■网友
所有的运行时异常都是可以在发生之前检测到并且避免的,这意味着一段代码如果写得好,将不会有抛出运行时异常的可能。因此,运行时异常被抛出时,程序员应该检查代码中的bug,而不是catch它。
■网友
摘自rod johnson \u0026lt;\u0026lt;expert one on one j2ee design and development\u0026gt;\u0026gt;
Java为啥将异常分为受检的和运行时异常这样分的依据和好处是啥

Java为啥将异常分为受检的和运行时异常这样分的依据和好处是啥

Java为啥将异常分为受检的和运行时异常这样分的依据和好处是啥

Java为啥将异常分为受检的和运行时异常这样分的依据和好处是啥

Java为啥将异常分为受检的和运行时异常这样分的依据和好处是啥



    推荐阅读