【面向对象】Java处理异常的方式
文章目录
- 一、什么是异常
- 1.1 异常的定义
- 1.2 异常的分类
- 二、Java的异常处理方式
- 2.1 try-catch
- 2.2 try-catch-finally
- 2.3 try-with-resources
- 2.4 throws
- 三、自定义异常
一、什么是异常
1.1 异常的定义
在 Java 中,异常指的是程序运行过程中出现的错误或意外情况,例如除以零、数组越界、文件未找到等。这些错误会导致程序中断,Java 提供了丰富的异常处理机制来应对这些问题。
1.2 异常的分类
Java 中的异常分为三类:
-
受检查异常(Checked Exception)编译时必须显式处理的异常。常见如 IOException、SQLException。
-
运行时异常(Unchecked Exception)编译时不强制处理,程序运行时可能发生的异常。常见如 NullPointerException、ArithmeticException。
-
错误(Error)严重的问题,如 JVM 错误,通常无法通过代码处理。常见如 OutOfMemoryError。
二、Java的异常处理方式
2.1 try-catch
try-catch 是最常见的异常处理方式。语法如下:
try {
// 可能抛出异常的代码
} catch (ExceptionType e) {
// 异常处理逻辑
}
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // 可能抛出异常
} catch (ArithmeticException e) {
System.out.println("除以零异常:" + e.getMessage());
}
}
}
2.2 try-catch-finally
finally 块用于无论是否发生异常,都必须执行的代码,比如释放资源。
import java.io.FileInputStream;
import java.io.IOException;
public class FinallyExample {
public static void main(String[] args) {
FileInputStream file = null;
try {
file = new FileInputStream("test.txt");
int data = file.read();
System.out.println("文件读取成功:" + data);
} catch (IOException e) {
System.out.println("文件读取失败:" + e.getMessage());
} finally {
if (file != null) {
try {
file.close();
} catch (IOException e) {
System.out.println("文件关闭失败:" + e.getMessage());
}
}
}
}
}
2.3 try-with-resources
Java 7 引入了 try-with-resources,用于自动关闭资源,实现了 AutoCloseable 接口的资源会在 try 块结束后自动关闭。
语法:
try (ResourceType resource = new ResourceType()) {
// 使用资源的代码块
} catch (ExceptionType e) {
// 异常处理逻辑
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TryWithResourcesExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) {
System.out.println(reader.readLine());
} catch (IOException e) {
System.out.println("文件读取失败:" + e.getMessage());
}
}
}
2.4 throws
throws 用于将异常向上抛出,由调用者处理。
public class ThrowsExample {
public static void main(String[] args) {
try {
readFile("test.txt");
} catch (IOException e) {
System.out.println("捕获异常:" + e.getMessage());
}
}
public static void readFile(String fileName) throws IOException {
throw new IOException("文件未找到");
}
}
三、自定义异常
Java 允许开发者根据业务需求创建自定义异常。自定义异常需要继承 Exception 或 RuntimeException。
// 自定义异常类
class InvalidAgeException extends Exception {
public InvalidAgeException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
checkAge(15);
} catch (InvalidAgeException e) {
System.out.println("捕获自定义异常:" + e.getMessage());
}
}
public static void checkAge(int age) throws InvalidAgeException {
if (age < 18) {
throw new InvalidAgeException("年龄必须大于等于18岁");
}
}
}