第三章:Java异常处理

一、异常核心体系(顶层+分类)

  1. 异常顶层父类: Throwable ,所有错误和异常都继承此类,核心含两个子类

  2. 两大核心分支(关键区分)

  • Error :系统级错误,无法通过代码处理,如内存溢出(OutOfMemoryError)、栈溢出(StackOverflowError),直接导致程序终止

  • Exception :程序级异常,可编码处理,是开发重点,分两类子异常

(1)运行时异常(非检查型):继承 RuntimeException ,编译不报错、运行时触发,如空指针(NullPointerException)、数组下标越界(ArrayIndexOutOfBoundsException)、类型转换异常

(2)编译时异常(检查型):直接继承 Exception ,编译必须处理(捕获/声明),否则报错,如IO异常(IOException)、SQL异常(SQLException)

二、异常处理 5个核心关键字(必记+用法)

  1. try :监控代码块,把可能出异常的代码包裹其中,单独使用无意义,必须搭配 catch 或 finally

  2. catch :捕获 try 中抛出的异常,可多个 catch 并列(子类异常在前、父类异常在后),内部写异常处理逻辑(打印/补救)

  3. finally :跟在 catch 之后,无论是否触发异常都会执行,核心用途是释放资源(关闭IO流、数据库连接),唯一不执行的情况是调用 System.exit(0) 终止JVM

  4. throw :写在方法内部,手动主动抛出单个异常对象(如 throw new NullPointerException("空指针异常") )

  5. throws :写在方法声明后,声明该方法可能抛出的异常类型,把异常交给调用者处理,可声明多个异常,用逗号分隔

三、异常两种处理方式(开发常用)

  1. 捕获处理(try-catch[-finally]):自己处理异常,适合不想让异常向上传递的场景,格式:

java

try{

可能出异常的代码;

}catch(异常类型 异常名){

异常处理逻辑;

}finally{

资源释放代码;

}

  1. 声明抛出(throws):不处理异常,抛给上层调用者,适合需要逐层反馈异常的场景,格式: public void 方法名() throws 异常类型1,异常类型2{}

四、自定义异常(按需实现)

  1. 核心前提:继承 Exception (编译时异常)或 RuntimeException (运行时异常),二选一即可

  2. 必备步骤:重写2个构造方法(无参构造+带异常信息的有参构造),满足不同场景手动抛异常需求

  3. 简单示例:自定义一个登录失败异常(运行时)

java

public class LoginFailException extends RuntimeException{

public LoginFailException(){} // 无参构造

public LoginFailException(String msg){super(msg);} // 带信息构造

}

五、异常处理 3个核心注意事项

  1. 多个 catch 并列时,子类异常必须放在父类异常前面(否则父类会捕获所有子类异常,子类catch失效)

  2. 重写方法的异常规则:子类重写父类方法时,抛出的异常不能比父类方法的异常范围大(可少抛、不抛,或抛子类异常)

  3. JDK7+ 简化资源关闭:用 try-with-resources 语法,将资源声明在try后的括号中,程序结束会自动关闭资源,无需写finally,适配实现 AutoCloseable 接口的类(IO流、数据库连接)

喜欢的宝宝们可以一键三连哦~爱你们!

相关推荐
lee_curry2 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
码途漫谈3 小时前
Easy-Vibe开发篇阅读笔记(四)——前端开发之结合 Agent Skills 美化界面
人工智能·笔记·ai·开源·ai编程
九转成圣3 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
SmartRadio4 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
laowangpython4 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
我叫汪枫4 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch4 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI4 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn
Brendan_0014 小时前
JavaScript的Stomp.over
开发语言·javascript·ecmascript
念2344 小时前
f5 shape分析
开发语言·javascript·ecmascript