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后括号内声明资源,代码结束后自动关闭

 

• 优势:简化代码,避免资源泄漏

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐