MST

星途 面试题库

面试题:Java异常处理:常见异常类型及捕获

在Java中,列举至少三种常见的运行时异常(RuntimeException)和非运行时异常(Checked Exception),并描述在一个可能抛出这些异常的方法中,如何正确地使用try - catch块捕获和处理异常,同时说明finally块的作用及使用场景。
26.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

常见运行时异常

  1. NullPointerException:当应用程序试图在需要对象的地方使用 null 时抛出。例如调用 null 对象的方法或访问其属性。
  2. IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。如访问数组中不存在的索引位置。
  3. ArithmeticException:当出现异常的运算条件时抛出。例如,一个整数“除以零”时,抛出此类的一个实例。

常见非运行时异常

  1. IOException:当发生某种I/O异常时抛出。例如,文件不存在时进行读取操作。
  2. SQLException:提供关于数据库访问错误或其他错误信息的异常。在执行SQL语句时,若数据库连接问题、SQL语法错误等会抛出此异常。
  3. ClassNotFoundException:应用程序试图加载类时,类在其搜索路径中不存在,抛出该异常。比如使用 Class.forName() 加载一个不存在的类。

try - catch块捕获和处理异常

在一个可能抛出异常的方法中,使用 try - catch 块捕获和处理异常的示例如下:

public void someMethod() {
    try {
        // 可能抛出异常的代码
        int result = 10 / 0; // 会抛出ArithmeticException
        FileReader fileReader = new FileReader("nonexistentFile.txt"); // 会抛出FileNotFoundException,它是IOException的子类
    } catch (ArithmeticException e) {
        // 处理ArithmeticException异常
        System.out.println("捕获到算术异常: " + e.getMessage());
    } catch (IOException e) {
        // 处理IOException异常
        System.out.println("捕获到I/O异常: " + e.getMessage());
    }
}

try 块中放置可能抛出异常的代码。当异常发生时,程序流程立即跳转到对应的 catch 块进行处理。不同类型的异常可以有不同的 catch 块,以便进行针对性的处理。

finally块的作用及使用场景

finally 块的作用是无论 try 块中是否发生异常,也无论 catch 块是否捕获到异常,finally 块中的代码总会被执行。

常见使用场景:

  1. 资源关闭:在使用完文件、数据库连接等资源后,在 finally 块中确保资源被关闭。例如:
FileReader fileReader = null;
try {
    fileReader = new FileReader("example.txt");
    // 读取文件的操作
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (fileReader != null) {
        try {
            fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 清理操作:如释放锁资源等清理性的操作,无论程序是否正常结束或发生异常,都需要执行这些清理代码,就可以放在 finally 块中。