在Java中,什么是checked exception(即compile-time exception、编译时异常)?

有些exception必须被开发者在写代码时就处理(使用try catch或者throws),这种exception就叫checked exception,因为在编译代码时,编译器会检查(check)代码,假如开发者没有处理的话,编译是无法通过的。

之所以check加"ed "用过去式,是因为在程序正常运行期间,这些异常已经被前期的编译器检查过了,开发者也处理过了,是过去式,所以用"checked",常见的checked exception有IOException、SQLException等

例如下面这个例子,没用throws,如果不是加了try catch的话,是不会编译通过的!

java 复制代码
import java.io.*;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            FileReader file = new FileReader("nonExistent.txt");
            BufferedReader fileInput = new BufferedReader(file);
            System.out.println(fileInput.readLine());
            fileInput.close();
        } catch (IOException e) {
            System.out.println("IOException caught: " + e.getMessage());
        }
    }
}

为什么要把IOException这种异常算作checked exception呢?

因为处理io时,常常会遇到很多种意外情况,但这情况又不是因为我们开发者写的代码有bug而导致的。比如当我们想读取一个文件时,备不住就会发生...

  • 文件不存在
  • 磁盘满了
  • 网络连接超时
  • 没有该文件的访问权限
  • 已经打开的文件数量达到其所在的系统中的上限
    ...

这些情况太常见了,为了不影响程序继续往后运行,需要开发者去处理(try catch或者throws),但开发者可能写代码时没想起来这些意外 ,所以设计Java语言的人,就将这些意外情况算作checked exception。如此一来,在编译期,当编译器检查代码后发现不合格时,编译无法通过,这就相当于给开发者提个醒儿,然后开发者就会处理这些意外情况啦(通过try catch或throws)。

除了checked exception之外,像Null Pointer Exception、数组下标越界这种就算作开发者写的程序中的bug导致的,比如开发者本可以在使用对象前,先判断一下对象是否为null就可以避免 Null Pointer Exception了,不用非得try catch。但IO Exception这种就不一样了,你就算代码写的再完美 ,也无法阻止因外部存储设备、操作系统引起的问题,所以才强制开发者必须try catch!

图片来源:https://medium.com/@ahmed.abdelfaheem/checked-and-unchecked-exceptions-in-java-6cb1c9815d32

相关推荐
鬼手点金1 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟1 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php
paopaokaka_luck2 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
阿里嘎多学长2 小时前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Wang's Blog2 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog3 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
wangchunyu1143 小时前
Python 数据可视化实战入门教程
开发语言·python·信息可视化
蜗牛互联网3 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff3 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
Shaoshing4 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分