当前位置: 代码迷 >> 综合 >> Checked Exception VS Unchecked Exception
  详细解决方案

Checked Exception VS Unchecked Exception

热度:7   发布时间:2023-12-17 09:39:02.0

Checked Exception VS Unchecked Exception

  • Checked Exception 在编译时会检查的异常,如果在代码中有一个方法会抛出Checked Exception, 会当前方法必须处理 (catch) 这个异常,或者用throws关键词抛出这个异常。
import java.io.*class Main {
    public static void main(String[] args) {
    String filename = "/home/root/a.txt";FileReader fr = new FileReader(filename);BufferedReader br = new BufferedReader(fr);// just read a lineSystem.out.println(br.readline());// close the resourcebr.close();}}

output

Main.java:11: 错误: 未报告的异常错误FileNotFoundException; 必须对其进行捕获或声明以便抛出FileReader fr = new FileReader(filename);^
Main.java:14: 错误: 未报告的异常错误IOException; 必须对其进行捕获或声明以便抛出System.out.println(br.readLine());^
Main.java:16: 错误: 未报告的异常错误IOException; 必须对其进行捕获或声明以便抛出br.close();^
3 个错误

Check Exception是必须要程序员处理的异常,

  • Unchecked Exception是编译时不作检查的异常,而是将该检查交给程序员来处理。
                               Throwable/         \Error      Exception|         /      \(unchecked)  ...   RuntimeException|            |(checked)    (unchecked)

Error和RuntimeException是unchecked excpetion, 其余的是checked exception

为什么要设计出Unchecked Exception和Checked Exception呢?

以下全是个人理解

Unchecked Exception

首先unchecked exception只有Error及其子类,RuntimeException及其子类。

如果Error一旦发生,说明程序已经出现致命的错误,在无法在程序中进行处理。所以它是错误,是没有办法处理的。所以Error不需要处理。

如果是RuntimeException,故名思义,运行时异常,在运行才能被检测出来是否是异常。
运行时异常没有办法判断。所以设计者将它定义为unchecked, 不强制程序处理这种异常。不处理这种异常的好处就是,代码更加简洁,将它抛给最上层的调用者,由最上层的调用者负责。

哪些异常应该作为Unchecked Exception呢?

在程序中出了异常,可以向上抛不会对当前逻辑造成影响,比如NullPointException

在Java Web中我们可以自定义RuntimeException,用来处理请求参数异常、数据库异常等,在Controller端统一处理。

Checked Exception

除了RuntimeException及其子类的Exception都是checked exception,比如:

IOException, BrokenBarrierException, TimeoutException

其实Checked Exception是指那些出了问题要马上处理的异常,比如IOException,TimeoutException,不处理就可能会有大问题。

哪些异常应该作为Checked Exception呢?

在程序中出了异常,应该立马处理,否则会造成资源浪费,甚至造成文件损坏等,这些异常应该被作为Checked Exception

  相关解决方案