📜  异常处理 (1)

📅  最后修改于: 2023-12-03 15:25:33.455000             🧑  作者: Mango

异常处理

在编写代码的过程中,可能会出现各种各样的错误。而异常处理就是用来在程序运行过程中,处理这些错误的机制。如果不处理错误,程序运行时会出现崩溃或者异常退出的情况。

什么是异常

在程序中,异常是指一些意外情况,比如说:

  • 网络连接超时
  • 读取不存在的文件
  • 操作未初始化的变量
  • 除数为0等等

这些意外情况都会导致程序运行不正常。如果程序没有处理这些异常情况,就会出现不可预期的错误。

异常处理的分类

在 Java 中,异常分为三类:

  • 受检查异常
  • 非受检查异常
  • 错误
受检查异常

受检查异常是在编译时就被检查出来的异常,程序必须处理这些异常,否则编译不通过。比如说文件读取异常。

try {
    FileReader file = new FileReader("test.txt");
    //...
} catch (FileNotFoundException e) {
    System.err.println("文件不存在!");
}

上面的代码中,由于 FileReader 可能会抛出 FileNotFoundException 异常,因此需要对这个异常进行处理。

非受检查异常

非受检查异常是在运行时才能被检查出来的异常,程序可以不对它们进行处理。比如说数组越界异常。

int[] arr = { 1, 2, 3 };
System.out.println(arr[3]); // 抛出 ArrayIndexOutOfBoundsException 异常
错误

错误是一种严重错误,程序无法处理,只能让程序崩溃。比如说 OutOfMemoryError。

int[] arr = new int[Integer.MAX_VALUE]; // 抛出 OutOfMemoryError 错误
异常处理的概念

在 Java 中,异常处理采用 try-catch-finally 语句块来实现。try 语句块中放置可能抛出异常的代码,catch 语句块中放置对异常的处理代码,finally 语句块中放置一些无论异常是否被抛出都需要执行的代码。

try {
    // 可能抛出异常的代码
} catch (Exception e) {
    // 异常处理代码
} finally {
    // 无论是否有异常都需要执行的代码
}

例如,我们想要读取一个文件,如果读取失败,则输出错误信息。否则输出文件内容。

try {
    FileReader file = new FileReader("test.txt");
    // 读取文件内容
    //...
} catch (FileNotFoundException e) {
    System.err.println("文件不存在!");
} finally {
    System.out.println("程序结束。");
}

如果文件不存在,就会输出“文件不存在!”;否则输出文件内容,并在最后输出“程序结束。”。

抛出异常

除了捕获异常之外,程序也可以通过 throw 语句来手动抛出异常。

public void checkAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("年龄不能为负数。");
    } else {
        System.out.println("年龄为:" + age);
    }
}

上面的代码中,如果年龄为负数,就会手动抛出异常。这样做的好处是可以提前终止程序的执行,避免出现更严重的错误。

本次介绍的就是关于异常处理的所有内容,记得在编写程序时处理异常,这将会让您的程序变得更加健壮。