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

Java 异常

Java 异常的体系结构

java.lang.Throwable
├── Error(严重错误,程序无法处理)
│   ├── OutOfMemoryError
│   ├── StackOverflowError
│   └── ...
└── Exception(程序可以处理的异常)├── Checked Exception(编译时异常)│   ├── IOException│   ├── SQLException│   └── ...└── Unchecked Exception(运行时异常,RuntimeException)├── NullPointerException├── ArrayIndexOutOfBoundsException├── ClassCastException└── ...

Error(错误)

不建议捕获,如 OutOfMemoryError、StackOverflowError 通常是 JVM 层级的错误

Checked Exception(受检查异常)

编译阶段必须处理(捕获或抛出)常见如:IOException、SQLException

Unchecked Exception(非受检查异常)

编译器不会强制处理 多为编程错误:NullPointerException、ArithmeticException、ArrayIndexOutOfBoundsException

异常处理机制

try-catch-finally

try {// 可能抛出异常的代码
} catch (ExceptionType e) {// 处理异常
} finally {// 无论是否发生异常都会执行
}

多异常处理

catch (IOException | SQLException e) {// 多个异常的统一处理
}

try-with-resources

try-with-resources 是 Java 7 引入的一个语法结构,用于 自动关闭资源,避免忘记关闭资源导致内存泄漏或句柄耗尽

try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}
// 不需要手动调用 br.close()!

抛出异常

throw 语句

throw new IllegalArgumentException("参数非法");

throws

throws 的作用

将异常抛给调用者处理:如果一个方法内部可能抛出异常,但该方法自己不处理(没有 try-catch),就需要在方法签名中使用 throws 把异常抛出去,让调用者负责处理

让编译器检查异常是否被处理:对 Checked Exception(受检异常),Java 编译器会强制要求你

  • 要么用 try-catch 捕获
  • 要么用 throws 向上传递
public void readFile(String path) throws IOException {FileReader reader = new FileReader(path); // 可能抛出 IOException
}

调用者必须处理异常:

try {readFile("test.txt");
} catch (IOException e) {e.printStackTrace();
}
http://www.xdnf.cn/news/336511.html

相关文章:

  • 深入理解 Docker 网络原理:构建高效、灵活的容器网络
  • 缓存局部性保留
  • 【Python】PDF文件处理(PyPDF2、borb、fitz)
  • 2022年8月,​韩先超对中移信息进行微服务架构原理(Docker+k8s+DevOps+Go等)培训
  • MYSQL的行级锁到底锁的是什么东西
  • iOS 模块化开发流程
  • DeepSeek多尺度数据:无监督与原则性诊断方案全解析
  • 查看jdk是否安装并且配置成功?(Android studio安装前的准备)
  • Vue3 + Node.js 实现客服实时聊天系统(WebSocket + Socket.IO 详解)
  • 大模型深度思考与ReAct思维方式对比
  • Linux下部署Keepalived
  • Oracle免费认证来袭
  • 计算机学习路线与编程语言选择(信息差)
  • 排序算法-选择排序
  • 计算机网络常识:缓存、长短连接 网络初探、URL、客户端与服务端、域名操作 tcp 三次握手 四次挥手
  • v-model原理详解
  • Java 对象克隆(Object Cloning)详解
  • 【统计学基础】随机抽样的特点
  • Oracle OCP认证考试考点详解083系列13
  • Windows系统安装Cursor与远程调用本地模型QWQ32B实现AI辅助开发
  • 服务器托管的常见问题
  • Rspack:字节跳动自研 Web 构建工具-基于 Rust打造高性能前端工具链
  • C——VS的调试技巧
  • 图灵码上爬第5题:屠龙刀--爬虫逆向
  • 7系列 之 OSERDESE2
  • Pandas比MySQL快?
  • CentOS的防火墙工具(firewalld和iptables)的使用
  • Linux云计算训练营笔记day04(Rocky Linux中的命令)
  • 微信小程序备案的一些记录
  • Logback官方文档翻译章节目录