异常(java)
1. 异常的定义
Java 中的异常是程序运行时发生的不正常情况(错误或意外),会中断正常执行流程,通过异常处理机制可捕获并处理这些情况,保证程序健壮性。
2. 异常的分类(继承体系)
异常的顶层父类是 Throwable,分为两大子类:
• Error:严重错误(如 OutOfMemoryError、StackOverflowError),由 JVM 抛出,程序无法处理,通常直接终止。
• Exception:程序可处理的异常,又分为:
◦ 受检异常(Checked Exception):编译时必须处理(捕获或声明抛出),如 IOException、SQLException、ClassNotFoundException。
◦ 非受检异常(Unchecked Exception):运行时异常,编译时无需处理,如 NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException,继承自 RuntimeException。
3. 异常处理机制
(1)捕获异常:try-catch-finally
• try:包裹可能抛出异常的代码块
• catch:捕获指定类型的异常并处理(多个catch需按异常子类到父类顺序排列)
• finally:无论是否发生异常都会执行(常用于释放资源,如关闭流、数据库连接;JVM退出时除外,如System.exit(0))
(2)声明抛出异常:throws
方法无法处理异常时,通过throws关键字声明抛出给调用者处理;受检异常必须声明,非受检异常可声明也可不声明。
(3)手动抛出异常:throw
通过throw关键字主动抛出异常对象(需创建异常实例),如:throw new NullPointerException("空指针异常");
4. 自定义异常
继承Exception(受检)或RuntimeException(非受检)实现:
• 步骤:定义类继承父异常类,添加构造方法(无参、带字符串消息、带消息和原因)
• 作用:针对业务场景定义专属异常,提高代码可读性和异常处理针对性
5. 异常处理原则
• 避免捕获所有异常(如直接catch Exception),应精准捕获具体异常
• 不要忽略异常(catch块内不能为空),至少打印异常信息
• 资源释放优先放在finally或使用try-with-resources(自动关闭AutoCloseable接口实现类)
• 受检异常和非受检异常按需选择:业务可恢复异常用受检,编程错误用非受检
6. try-with-resources
Java 7 引入,自动关闭实现AutoCloseable接口的资源(如流、连接),替代finally手动关闭:
• 语法:try后括号内声明资源,代码结束后自动关闭
• 优势:简化代码,避免资源泄漏
更多推荐

所有评论(0)