位置:首页 > Java > Java异常处理入门:详解try catch finally使用技巧

Java异常处理入门:详解try catch finally使用技巧

时间:2026-08-20  |  作者:游戏探长  |  阅读:0

一、什么是异常

异常,就是程序运行过程中出现的“非正常情况”。比如程序执行到一半突然中断,或者进入了不该进入的流程。

不过有一个前提:语法本身必须正确。如果语法写错了,编译阶段就会直接报错,这属于编译错误,不归异常处理范围。

Ja va异常处理怎么学?一文详解trycatchfinally使用技巧

二、异常体系(顶层:Throwable)

Java中的异常体系,顶层是 Throwable。它主要分为两大类:

  1. Error 错误——虚拟机级别的严重问题,比如栈溢出、内存溢出OOM。程序自身没法处理,也不用管它,捕获了也没意义。
  2. Exception 异常——这才是我们要关注和处理的。

Exception 的常见分类

  • 受检异常(编译异常):编译器强制要求你处理。要么用try-catch兜住,要么在方法签名上throws扔出去。典型例子:IO异常、文件找不到、线程睡眠异常。
  • 运行时异常(RuntimeException):编译阶段不会强制处理,运行时才暴露问题。大多是代码里的bug,比如空指针、数组越界、除数为0、类型转换异常、非法参数。要不要处理,要看场景,但通常不建议放任不管。

三、五个关键字用法

异常处理里最常用的,有这五个关键字:

  1. try:把可能出错的代码包起来,像给危险区域加一层保护。
  2. catch:捕获对应类型的异常,然后进行处理,比如记录日志、提示用户、或者做补偿操作。
  3. finally:不管是否发生异常,它基本都会执行。常用来关流、释放资源。唯一例外是调用了System.exit(),让JVM直接退出,这时finally不会执行。
  4. throws:写在方法声明后面,表示“这个方法可能抛出某些异常”,由调用方决定怎么处理。
  5. throw:写在方法内部,手动抛出一个异常对象,主动触发异常。

throw 和 throws 的区别

  • throws:用于声明异常,是提前告知调用方。
  • throw:用于抛出异常,是在代码中主动触发。

四、多 catch 规则

如果有多个catch连续编写,要记住一条规则:子类异常必须写在父类前面

原因很简单。父类异常如果先匹配,后面的子类异常就永远没有机会执行,编译器会直接报错。

五、自定义异常

在业务场景中,经常需要定义专属的异常类型。比如订单超时异常、余额不足异常。

常见做法是继承RuntimeException。这样不用强制声明throws,更方便统一处理。写法如下:

public class MyBizException extends RuntimeException {
    public MyBizException(String msg) {
        super(msg);
    }
}

六、写代码小规范

  • 别写空catch。至少要打印异常信息,否则出了问题很难定位。
  • 尽量捕获具体异常。比如IO异常、SQL异常。不要为了省事直接catch Exception,这样容易掩盖意料之外的问题。
  • 别拿异常当if用。异常用于逻辑判断,开销很大。能提前校验的,尽量用if。
  • JDK7及以上,建议使用try-with-resources。它可以自动关闭流,省去手写finally释放资源,代码也更清爽。

七、注意事项

  • Error不可处理,Exception可处理。不要把精力浪费在抓Error上。
  • 编译异常必须处理,运行时异常可处理可不处理,但通常不建议忽视。
  • finally绝大多数情况下都会执行,前提是JVM没有被强制关闭。
  • throw是主动抛,throws是被动声明,两者不要混淆。

八、总结

异常处理是Ja va开发的基本功。掌握好异常体系和几个关键字,就能写出更健壮、更清晰的代码。

上面这些内容,基本覆盖了日常开发中90%的常见场景。多写几次、多用几次,自然就能熟练掌握。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多