当前位置: 首页 > news >正文

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

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

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

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

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!
Java main components of the exception hierarchy
图片来源:https://medium.com/@ahmed.abdelfaheem/checked-and-unchecked-exceptions-in-java-6cb1c9815d32

相关文章:

  • 【学习笔记】机器学习(Machine Learning) | 第五章(3)| 分类与逻辑回归
  • Go小技巧易错点100例(三十)
  • DEX平台引领风尚 XBIT让数字资产回归简单与透明
  • 乐视系列玩机------乐视pro3精英版-x722的一些刷机救砖教程与固件资源
  • Gateway网关:路由和鉴权
  • Android控件View、ImageView、WebView用法
  • QT 在圆的边界画出圆
  • Python打造智能化多目标车辆跟踪系统:从理论到实践
  • LeetCode 热题 100 70. 爬楼梯
  • python读取图片自动旋转的问题解决
  • 深入解析:删除有序数组中的重复项 II——巧用双指针实现条件筛选
  • 【Leetcode 每日一题 - 补卡】838. 推多米诺
  • 掌握流量管理:利用 EKS Ingress 和 AWS 负载均衡器控制器
  • 用户模块 - IP归属地技术方案
  • TCP/IP协议深度解析:从分层架构到TCP核心机制
  • MySQL 复合查询
  • Spring AMQP源码解析
  • 英伟达语音识别模型论文速读:Fast Conformer
  • MongoDB入门详解
  • \documentclass[lettersize,journal]{IEEEtran}什么意思
  • “五一”假期预计全社会跨区域人员流动量累计14.67亿人次
  • 无畏契约新王诞生:属于电竞世界的凯泽斯劳滕奇迹
  • 人民日报今日谈:坚决克服麻痹思想,狠抓工作落实
  • 五一假期前三日多景区客流刷新纪录,演艺、古镇、山水都很火
  • 中国海警局回应日本民用飞机侵闯我钓鱼岛领空:依法警告驱离
  • “仿佛一场追星粉丝会”,老铺黄金完成国内头部商业中心全覆盖,品牌化后下一步怎么走?