java 异常处理 try catch finally throw throws 自定义异常

发布时间:2025-04-28      访问量:36
在 Java 中,异常处理是一种重要的机制,用于处理程序运行时可能出现的错误情况,保证程序的健壮性和稳定性。下面为你详细介绍 Java 异常处理的相关知识,包含异常的分类、异常处理语句以及自定义异常等内容。

异常分类
在 Java 里,异常类都继承自 `Throwable` 类,`Throwable` 有两个重要的子类:`Error` 和 `Exception`。
- **Error**:代表系统级的错误,一般是由 JVM 自身产生的,程序无法处理,例如 `OutOfMemoryError`、`StackOverflowError` 等。
- **Exception**:代表程序可以处理的异常,它又可分为受检查异常(Checked Exception)和运行时异常(Runtime Exception)。
- **受检查异常**:在编译时就必须进行处理,否则无法通过编译,像 `IOException`、`SQLException` 等。
- **运行时异常**:在编译时不需要强制处理,通常是由程序逻辑错误导致的,例如 `NullPointerException`、`ArrayIndexOutOfBoundsException` 等。

异常处理语句
Java 提供了 `try`、`catch`、`finally` 和 `throw`、`throws` 等关键字来处理异常。

1. `try-catch` 语句
`try` 块中放置可能会抛出异常的代码,`catch` 块用于捕获并处理异常。示例如下:
java public class TryCatchExample { public static void main(String[] args) { try { int[] arr = {1, 2, 3}; // 会抛出 ArrayIndexOutOfBoundsException 异常 System.out.println(arr[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("捕获到数组越界异常: " + e.getMessage()); } } }

2. `try-catch-finally` 语句
`finally` 块中的代码无论是否发生异常都会被执行,一般用于释放资源。示例如下:
java import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TryCatchFinallyExample { public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("test.txt"); // 读取文件操作 } catch (FileNotFoundException e) { System.out.println("文件未找到: " + e.getMessage()); } catch (IOException e) { System.out.println("读取文件时发生 I/O 异常: " + e.getMessage()); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { System.out.println("关闭文件时发生异常: " + e.getMessage()); } } } } }

3. `throws` 关键字
`throws` 关键字用于方法声明,表明该方法可能会抛出某些异常,将异常处理的责任交给调用者。示例如下:
java import java.io.FileInputStream; import java.io.FileNotFoundException; public class ThrowsExample { public static void readFile() throws FileNotFoundException { FileInputStream fis = new FileInputStream("test.txt"); } public static void main(String[] args) { try { readFile(); } catch (FileNotFoundException e) { System.out.println("文件未找到: " + e.getMessage()); } } }

4. `throw` 关键字
`throw` 关键字用于手动抛出一个异常对象。示例如下:
java public class ThrowExample { public static void checkAge(int age) { if (age < 0) { throw new IllegalArgumentException("年龄不能为负数"); } System.out.println("年龄合法: " + age); } public static void main(String[] args) { try { checkAge(-5); } catch (IllegalArgumentException e) { System.out.println("捕获到异常: " + e.getMessage()); } } }

自定义异常
你可以通过继承 `Exception` 或 `RuntimeException` 类来创建自定义异常。示例如下:
java // 自定义异常类 class MyException extends Exception { public MyException(String message) { super(message); } } // 使用自定义异常 public class CustomExceptionExample { public static void doSomething(int num) throws MyException { if (num < 0) { throw new MyException("输入的数字不能为负数"); } System.out.println("输入的数字合法: " + num); } public static void main(String[] args) { try { doSomething(-5); } catch (MyException e) { System.out.println("捕获到自定义异常: " + e.getMessage()); } } }

总结
- 运用 `try-catch` 语句捕获并处理异常。
- 借助 `finally` 块确保资源被释放。
- 使用 `throws` 关键字将异常处理的责任交给调用者。
- 利用 `throw` 关键字手动抛出异常。
- 可通过继承 `Exception` 或 `RuntimeException` 类创建自定义异常。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念