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

Java 异常处理机制(异常分类、try-catch、自定义异常)

一、前言

程序运行时出现的非语法错误(空指针、数组越界、除数为 0)统称为异常。如果不处理,程序会直接终止、崩溃。Java 提供了完善的异常处理机制,保证程序健壮性,是课程作业必考知识点。

二、异常的分类

1. 编译时异常(受检异常)

必须处理,否则代码报错 例:文件读写异常、日期解析异常

2. 运行时异常(非受检异常)

运行时才报错,编译不报错 例:空指针、数组越界、除数为 0

3. 错误 Error

系统级严重问题,程序无法处理

三、异常处理四大关键字

  • try:包裹可能出错的代码
  • catch:捕获并处理异常
  • finally:无论是否异常,一定执行(释放资源)
  • throws:抛出异常,交给上层处理

四、标准 try-catch-finally 示例

java

运行

public class ExceptionDemo { public static void main(String[] args) { try { int a = 10 / 0; // 除数为0异常 } catch (ArithmeticException e) { System.out.println("算术异常:除数不能为0"); } finally { System.out.println("代码执行完毕,无论是否报错都会执行"); } } }

五、throws 抛出异常

适用于:自己不想处理,交给调用者处理

java

运行

public class ThrowsDemo { public static void test() throws Exception{ int[] arr = {1,2,3}; System.out.println(arr[10]); } public static void main(String[] args) throws Exception { test(); } }

六、常用运行时异常

  • NullPointerException空指针异常
  • ArrayIndexOutOfBoundsException数组下标越界
  • ArithmeticException算术异常
  • ClassCastException类型转换异常

七、自定义异常(作业高频)

当系统自带异常不满足业务需求时,自定义业务异常:

java

运行

// 自定义异常类 class AgeException extends RuntimeException{ public AgeException(String msg){ super(msg); } } public class CustomException { public static void checkAge(int age){ if(age < 0 || age > 150){ throw new AgeException("年龄不合法!"); } } public static void main(String[] args) { checkAge(200); } }

八、总结

  1. 异常分为编译时异常、运行时异常、错误
  2. try-catch捕获处理异常,防止程序崩溃;
  3. finally用于资源释放;
  4. throws向上抛出异常;
  5. 自定义异常可以实现业务规则校验,让程序更规范健壮。
http://www.zskr.cn/news/1483505.html

相关文章:

  • 打破数据孤岛:基于Apache SeaTunnel的异构数据源实时同步架构设计与实战
  • 从仿真到板子:手把手教你搞定单相GaN图腾柱PFC的驱动时序(含过零续流管配置)
  • C语言指针之二malloc的用法及详解
  • 2026年北京离婚律师实力对比 5位深耕家事各有专长 - 本地品牌推荐
  • MixIO vs Blynk/MQTT:一个更适合Mixly用户的物联网平台选择?
  • 拆解5G基站RRU:FPGA里到底塞了哪些模块?从DUC到DPD,一张图讲清楚
  • 别再死记硬背了!用这5个真实项目案例,帮你彻底搞懂软件工程导论核心概念
  • 变身大冒险:从“半成品代码“到“电脑悄悄话“的神奇变身术
  • 高校外聘教师信息登记与课时工资自动核算桌面工具(C# + SQL Server)
  • JVM 性能调优与线上问题定位方法论
  • 阿贝云服务器挖矿程序攻击预防与处理实用心得
  • 金融行业会议转写防坑指南:夸克、讯飞、随身鹿真实对比
  • TVA为什么是企业智能化升级的战略支点(13)
  • 私有化部署B2B解决方案推荐:2026年最新测评
  • 学了Spring AI Graph再看LangGraph,发现API几乎一模一样
  • 电力工程师必看:手把手教你用Python解析COMTRADE文件(含CFG/DAT文件实战)
  • 2026年AI营销获客工具盘点:4大核心选型维度
  • KMS_VL_ALL_AIO:Windows与Office批量激活的终极技术方案
  • Jsxer:如何快速解码Adobe JSXBIN二进制脚本文件?
  • Android音频策略配置实战:手把手教你读懂audio_policy_configuration.xml(附源码解析)
  • 告别卡顿与依赖错误:保姆级优化你的Unitree Go1 Nano主控开发环境(换源、网关、jtop监控全攻略)
  • ESP32 I2C总线扫盲:如何用Arduino框架和PlatformIO快速扫描并连接你的传感器
  • 用Delphi7和SPComm手撸一个SBUS调试助手:从串口抓包到通道数据可视化
  • 别再死记叉乘公式了!用Python和NumPy玩转向量运算与反对称矩阵
  • F28335 SPI与EEPROM/Flash通信实战:从寄存器配置到数据读写全流程
  • ESP32 I2C驱动OLED屏幕:从硬件连接到显示‘Hello World’的完整流程(附代码)
  • 2026年精选8款文件夹加密软件分享
  • 单人创业,靠 StarLny 搭建数字团队
  • py-spy:不改动代码就能分析 Python 性能
  • F28335 DSP驱动AD7606避坑指南:从原理图焊接到CCS代码调试的完整流程