Java异常处理怎么做?5步教你掌握try-catch与自定义异常(完整实战指南)
本教程系统讲解Java异常处理技巧,包括基本异常捕获、try-catch-finally语法、自定义异常、异常链处理及调试优化方法。通过代码实例和实战案例,帮助新手快速掌握Java异常处理机制,并提升程序稳定性与容错能力。教程基于2026最新版Java开发环境,适用于企业开发、项目调试及个人学习实践。
正文教程
一、Java异常基础(Exception & Error)
Java异常分为两类:
受检异常(Checked Exception):必须处理或抛出,如IOException
运行时异常(Unchecked Exception):可选择处理,如NullPointerException
示例:
public class ExceptionDemo {
public static void main(String[] args) {
try {
int result = 10 / 0; // ArithmeticException
} catch (ArithmeticException e) {
System.out.println("捕获到算术异常:" + e.getMessage());
}
}
}
技巧:
针对不同异常类型进行精确捕获
避免使用通用Exception捕获所有异常
二、try-catch-finally使用
try用于包裹可能抛出异常的代码,catch捕获异常,finally用于清理资源。
示例:
import java.io.*;
public class FileDemo {
public static void main(String[] args) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("test.txt"));
System.out.println(reader.readLine());
} catch (FileNotFoundException e) {
System.out.println("文件未找到:" + e.getMessage());
} catch (IOException e) {
System.out.println("读写错误:" + e.getMessage());
} finally {
try {
if(reader != null) reader.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
技巧:
finally保证资源释放
try-with-resources可以自动关闭资源(推荐)
三、try-with-resources(自动关闭资源)
Java 7引入自动关闭资源的语法。
示例:
import java.io.*;
public class AutoCloseDemo {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) {
System.out.println(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
优势:
自动关闭资源
代码更简洁
避免资源泄露
四、自定义异常(增强程序可读性)
自定义异常可明确业务逻辑错误。
示例:
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
public class CustomExceptionDemo {
public static void checkValue(int value) throws MyException {
if (value < 0) throw new MyException("值不能为负数");
}
public static void main(String[] args) {
try {
checkValue(-5);
} catch (MyException e) {
System.out.println("捕获到自定义异常:" + e.getMessage());
}
}
}
技巧:
用自定义异常表示特定业务错误
便于调试和维护
五、异常链(Exception Chaining)
通过异常链可以保留原始异常信息。
示例:
public class ExceptionChainDemo {
public static void main(String[] args) {
try {
method1();
} catch (Exception e) {
e.printStackTrace();
}
}
static void method1() throws Exception {
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
throw new Exception("方法1出现异常", e);
}
}
}
优势:
保留原始异常栈信息
提高调试效率
六、异常处理最佳实践
精准捕获异常,不滥用
catch(Exception e)对资源操作使用try-with-resources
自定义异常用于业务逻辑错误
记录日志而非直接
printStackTrace()结合异常链保留原始异常信息
总结
Java异常处理的核心在于精准捕获、合理抛出、资源安全管理及业务自定义异常。掌握try-catch-finally、try-with-resources、自定义异常和异常链技术,可以显著提高程序稳定性和容错能力。建议新手从基础捕获异常入手,逐步学习自定义异常与异常链优化,从而实现高质量Java程序开发。