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

Jova笔记

Java博客:一文搞懂Java异常机制,告别空指针崩溃
标签
#Java #Java基础 #异常处理 #编程避坑
前言
写Java代码时,大家几乎都遇到过程序突然停止、控制台抛出红色报错,其中最常见的就是NullPointerException空指针异常。很多新手只会简单加try-catch包裹,却分不清异常和错误、受检异常与运行时异常的区别。本文结合实战代码梳理Java完整异常体系,讲清正确处理方式与开发规范,适合入门巩固、面试复习。
一、什么是异常?
异常是程序运行时出现的非正常情况,会打断正常执行流程。Java把所有异常/错误封装成类,统一继承顶层父类Throwable,分为两大分支:
Error(错误):系统级严重故障,代码无法捕获处理
例:StackOverflowError栈溢出、OutOfMemoryError内存溢出,只能优化代码、调整JVM参数规避。
Exception(异常):业务逻辑可预见问题,支持捕获、修复
受检异常(Checked Exception):编译强制处理,不捕获直接报错,如IO读写、文件不存在
运行时异常(RuntimeException):编译不校验,运行才报错,大多是代码书写问题,空指针、数组越界、类型强转失败都属于此类
二、核心关键字:try-catch-finally、throw、throws
1. try-catch-finally 基础结构
try包裹可能出错代码;catch捕获对应异常并处理;finally无论是否报错都会执行,常用于关闭流、释放资源。
public class ExceptionTest {
public static void main(String[] args) {
String str = null;
try {
System.out.println(str.length());
} catch (NullPointerException e) {
// 打印异常堆栈,定位报错位置
e.printStackTrace();
System.out.println("变量为空,执行兜底逻辑");
} finally {
System.out.println("代码执行完毕,释放资源");
}
}
}
2. throws 声明抛出异常
方法自身不处理异常,交给调用方捕获,多用于工具类、IO操作。
// 声明可能抛出文件不存在异常
public static void readFile() throws FileNotFoundException {
FileInputStream fis = new FileInputStream("test.txt");
}
3. throw 手动抛出异常
主动制造异常中断流程,多用于参数校验。
public static void checkAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
}
三、高频异常踩坑总结
NullPointerException 空指针
对象未初始化直接调用方法,解决方案:提前判空、使用Optional优雅处理。
ArrayIndexOutOfBoundsException 数组越界
访问下标超出数组长度,遍历前校验数组长度。
ClassCastException 类型转换异常
强转前先用instanceof判断类型。
ArithmeticException 算术异常
除数为0,除法前判断分母是否为0。
四、企业开发规范(避坑重点)
禁止空catch块,捕获异常必须打印日志或兜底处理,否则问题隐藏难以排查;
细分异常类型,不要直接捕获顶级Exception,避免掩盖未知错误;
资源关闭优先使用try-with-resources,自动关闭IO流、连接,简化finally代码;
// 自动关闭流,无需手动close
try (FileInputStream fis = new FileInputStream("test.txt")) {
byte[] buf = new byte[1024];
fis.read(buf);
} catch (IOException e) {
e.printStackTrace();
}
自定义业务异常,区分系统异常与业务报错,方便接口统

http://www.jsqmd.com/news/1036200/

相关文章:

  • 【扣子Coze教程】一分不花!用智能体3分钟搞定“早安电台“
  • Seedance 2.0 实测:四模态输入怎么用?Java 后端接入多模态视频生成的避坑指南
  • Cursor Pro激活工具完整指南:多账户管理终极解决方案
  • 开源AI工具链:轻量化Agent产品的设计哲学与工程实践
  • 沈阳黄金回收盘点:主流门店测评对比,附地址与实操指南 - 奢侈品回收评测
  • 企业AI应用密钥统一管理:基于Taotoken的实践指南
  • 合肥医药卫生学校招生简章(3+2护理,医学影像技术专业招收初中起点) - 我叫小周
  • 2026年 电子厂/半导体洁净空调推荐榜:精准控温与微尘级净化,打造电子净化中央空调标杆品牌 - 品牌发掘
  • AirBattery终极指南:如何在Mac上轻松管理所有苹果设备的电量?[特殊字符]
  • CodeWarrior DSP56800E目标设置全解析:从编译优化到调试配置
  • 抖音批量下载终极指南:高效无水印视频下载完整解决方案
  • uv、pip和venv三者之间的关系
  • AI编程工具vibe coding体验对比
  • 终极指南:如何让旧款iPhone/iPad重获新生?Legacy iOS Kit完整教程
  • 构建高性能指纹浏览器 RPC 桥梁:宿主机与浏览器页面之间的极速通信通道
  • 2026高校AI短剧漫剧实训平台推荐:产教融合新解法
  • 2026年豫北制造业与外贸企业数字化转型必读:短视频代运营+GEO推广+独立站推广完整破局指南 - 年度推荐企业名录
  • 8B/10B编码原理与SerDes应用:高速串行通信的时钟恢复与直流平衡
  • [特殊字符] 宝藏开源音乐播放器 Alger Music Player
  • MCP+Claude Code实战:从零搭建你的自动化编程助手
  • 怎样快速掌握免费开源乐谱识别工具:Audiveris完整实战指南
  • 2026无锡黄金回收市场乱象:卖金套路深,市民如何避坑? - 微城市网络
  • 终极聊天记录管理方案:WeChatMsg如何永久保存你的数字记忆
  • AI时代,还在古法画流程图?大人时代变了! AI生成高颜值流程图保姆级教程!
  • 权威发布:2026年南京十大装修公司排行榜(全南京11区|新房整装/老房翻新/别墅设计) - 装修新知
  • 如何高效解锁中兴光猫:zteOnu专业级配置实战指南
  • 病原微生物核酸提取试剂盒深度评测
  • 性能分析工程实践:从CodeWarrior Profiler看经典工具的核心原理与优化策略
  • WeakAuras自动更新终极指南:3分钟告别手动复制粘贴的完整解决方案
  • APK-Installer:Windows平台安卓应用安装的3分钟终极解决方案