Java博客一文搞懂Java异常机制告别空指针崩溃标签#Java #Java基础 #异常处理 #编程避坑前言写Java代码时大家几乎都遇到过程序突然停止、控制台抛出红色报错其中最常见的就是NullPointerException空指针异常。很多新手只会简单加try-catch包裹却分不清异常和错误、受检异常与运行时异常的区别。本文结合实战代码梳理Java完整异常体系讲清正确处理方式与开发规范适合入门巩固、面试复习。一、什么是异常异常是程序运行时出现的非正常情况会打断正常执行流程。Java把所有异常/错误封装成类统一继承顶层父类Throwable分为两大分支Error错误系统级严重故障代码无法捕获处理例StackOverflowError栈溢出、OutOfMemoryError内存溢出只能优化代码、调整JVM参数规避。Exception异常业务逻辑可预见问题支持捕获、修复受检异常Checked Exception编译强制处理不捕获直接报错如IO读写、文件不存在运行时异常RuntimeException编译不校验运行才报错大多是代码书写问题空指针、数组越界、类型强转失败都属于此类二、核心关键字try-catch-finally、throw、throws1. 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代码// 自动关闭流无需手动closetry (FileInputStream fis new FileInputStream(test.txt)) {byte[] buf new byte[1024];fis.read(buf);} catch (IOException e) {e.printStackTrace();}自定义业务异常区分系统异常与业务报错方便接口统
Jova笔记
发布时间:2026/6/18 13:57:29
Java博客一文搞懂Java异常机制告别空指针崩溃标签#Java #Java基础 #异常处理 #编程避坑前言写Java代码时大家几乎都遇到过程序突然停止、控制台抛出红色报错其中最常见的就是NullPointerException空指针异常。很多新手只会简单加try-catch包裹却分不清异常和错误、受检异常与运行时异常的区别。本文结合实战代码梳理Java完整异常体系讲清正确处理方式与开发规范适合入门巩固、面试复习。一、什么是异常异常是程序运行时出现的非正常情况会打断正常执行流程。Java把所有异常/错误封装成类统一继承顶层父类Throwable分为两大分支Error错误系统级严重故障代码无法捕获处理例StackOverflowError栈溢出、OutOfMemoryError内存溢出只能优化代码、调整JVM参数规避。Exception异常业务逻辑可预见问题支持捕获、修复受检异常Checked Exception编译强制处理不捕获直接报错如IO读写、文件不存在运行时异常RuntimeException编译不校验运行才报错大多是代码书写问题空指针、数组越界、类型强转失败都属于此类二、核心关键字try-catch-finally、throw、throws1. 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代码// 自动关闭流无需手动closetry (FileInputStream fis new FileInputStream(test.txt)) {byte[] buf new byte[1024];fis.read(buf);} catch (IOException e) {e.printStackTrace();}自定义业务异常区分系统异常与业务报错方便接口统