📅  最后修改于: 2023-12-03 15:38:17.314000             🧑  作者: Mango
在 Java 中,当程序出现异常时,它会抛出一个异常对象。这个异常对象包含了异常的类型、异常的原因和异常发生的位置等信息。Java 中的异常分为两种:已检查的异常和未检查的异常。
已检查的异常必须在方法中进行处理,否则编译器会报错。处理已检查的异常有两种方式:抛出异常和捕获异常。
当我们不想处理某个已检查的异常时,可以将异常抛给调用者处理。Java 中使用 throws
关键字来抛出异常。
public void readFile() throws IOException {
// 读取文件的代码
}
上面的代码中,throws
关键字表明这个方法可能会抛出 IOException
异常。调用这个方法的代码必须要使用 try-catch
块来处理这个异常,否则编译器会报错。
当我们想要处理某个已检查的异常时,可以使用 try-catch
块捕获异常。
public void readFile() {
try {
// 读取文件的代码
} catch (IOException e) {
// 处理 IOException 异常的代码
}
}
上面的代码中,try
块中的代码可能会抛出 IOException
异常。如果这个异常被抛出,catch
块会捕获这个异常并处理。在 catch
块中,我们可以做一些恰当的处理,比如打印异常的信息或采取恰当的措施来处理异常。
需要注意的是,catch
块必须按照异常的类型来捕获异常。如果代码中抛出的异常类型不是 catch
块中声明的异常类型,那么这个异常就无法被处理,会继续向外抛出。
除了 try-catch
块之外,Java 还提供了 finally
块。finally
块中的代码总是会被执行,无论在 try
块中是否有异常被抛出。
public void readFile() {
FileInputStream fis = null;
try {
fis = new FileInputStream("file.txt");
// 读取文件的代码
} catch (IOException e) {
// 处理 IOException 异常的代码
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// 处理异常
}
}
}
}
在上面的代码中,finally
块中关闭了文件输入流。无论在 try
块中是否有异常被抛出,文件输入流总是会被关闭。
在 Java 中,处理已检查的异常很重要。我们可以使用 throws
关键字将异常抛给调用者处理,也可以使用 try-catch
块来捕获并处理异常。此外,finally
块可以用来执行无论是否有异常都需要执行的代码。