在 Java 中,异常处理是确保程序在出现错误时能够优雅地处理和恢复的关键机制。Java 提供了一种结构化的异常处理机制,允许程序在遇到问题时捕获并处理异常,而不是让程序崩溃。下面是 Java 中异常处理的几个核心概念及其使用示例。
1.异常的分类
Error:表示 JVM 内部错误或资源耗尽的问题,通常不应当捕获或处理(例如OutOfMemoryError)。
Exception:表示程序逻辑错误或可预见的问题。Exception 类是所有异常的基类。
Checked Exception:受检异常是指在编译阶段就需要处理的异常,如果不处理,编译器会报错。常见的受检异常包括IOException、SQLException等。编译时异常,必须显式处理或声明。
Unchecked Exception:运行时异常,不强制要求处理(如 NullPointerException, ArithmeticException)。
2. 基本的异常处理
Java 使用 try, catch, finally 关键字来处理异常。
try块中包含可能引发异常的代码。
catch块用于捕获和处理异常。
finally块中包含无论是否有异常都要执行的代码(可选)。
public class ExceptionHandlingExample {
public static void main(String[] args) {
try {
// 可能抛出异常的代码
int result = 10 / 0; // 这会抛出 ArithmeticException
} catch (ArithmeticException e) {
// 捕获并处理异常
System.out.println("Error: " + e.getMessage());
} finally {
// 清理代码,无论是否有异常都执行
System.out.println("This will always be executed.");
}
}
}
3. 抛出异常
使用 throw 关键字可以显式地抛出异常,并使用 throws关键字声明方法可能抛出的异常。
public class ThrowExample {
public static void main(String[] args) {
try {
checkAge(15);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
static void checkAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("Age must be 18 or older.");
}
}
}
4. 自定义异常
可以创建自定义异常来提供更多的上下文信息。
// 自定义异常类
class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
throw new MyCustomException("This is a custom exception.");
} catch (MyCustomException e) {
System.out.println(e.getMessage());
}
}
}