Java异常类型及处理

  

Java异常类型及处理攻略

异常定义

在程序执行时,如果出现某种错误或异常,则会产生异常。Java中所有的异常信息都是用异常类的形式传递的。在Java中,所有异常都是派生于Throwable类(它是 Java 语言中所有错误或异常的超类)的一个子类。它既包括异常(Exception)也包括错误(Error),它们有各自的特点:

Exception

Exception类表示程序正常运行中发生的异常情况,它是程序可以捕获和处理的,这类异常通常包括:

  • IOException(输入输出异常)
  • SQLException(数据库查询异常)
  • ClassNotFoundException(类不存在异常)
  • NullPointerException(空指针异常)
  • ...

这些异常可以在代码中使用try语句块进行捕获和处理。

Error

Error类表示程序运行过程中出现严重的错误,程序无法自行恢复并继续执行。常见的错误包括:

  • OutOfMemoryError(内存溢出错误)
  • StackOverflowError(堆栈溢出错误)
  • NoClassDefFoundError(类找不到错误)
  • ...

此类错误无法使用try语句块捕获和处理,需要对代码进行改进来避免这些错误。

异常处理

在Java中,使用try-catch-finally语句块来处理异常。try语句块主要包含可能出现异常的语句,如果在try块中发现异常,则抛出异常,代码将继续执行catch块中的代码,直到找到将异常处理的catch块,否则程序就会终止,并显示异常信息。

try {
    // 可能抛出异常的代码
    throw new Exception("这是一个异常");
} catch (Exception e) {
    // 处理异常,输出异常信息
    System.out.println("捕获到异常:" + e.getMessage());
} finally {
    // 不管是否有异常,这里的代码都会被执行
    System.out.println("finally块中的代码被执行");
}

上面的代码中,我们故意抛出了一个异常,通过catch块来捕获异常,然后输出异常信息。无论是否有异常发生,finally块中的代码都会被执行。

可以通过多个catch语句块来捕获不同类型的异常:

try {
    // 可能抛出异常的代码
    throw new SQLException("数据库异常");
} catch (IOException e1) {
    // 处理IOException异常
} catch (SQLException e2) {
    // 处理SQLException异常
} finally {
    // 不管是否有异常,这里的代码都会被执行
}

此外,可以通过throws关键字将异常抛给调用方法的上层方法进行处理:

public void testMethod() throws Exception {
    // 可能抛出异常的代码
    throw new Exception("这是一个异常");
}

public void callingMethod() {
    try {
        testMethod();
    } catch (Exception e) {
        // 处理异常
    }
}

如果不处理异常,可以通过throw关键字手动抛出异常:

if (status == 0) {
    throw new Exception("状态值为0,抛出异常");
}

示例说明

示例1:输入输出异常

public static void main(String[] args) {
    try {
        BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
        String line = reader.readLine();
        while (line != null) {
            System.out.println(line);
            line = reader.readLine();
        }
        reader.close();
    } catch (FileNotFoundException e1) {
        System.out.println("文件不存在");
    } catch (IOException e2) {
        System.out.println("读取文件时出现异常");
    }
}

上面的代码中,我们尝试读取一个文件的内容,如果文件不存在或者读取文件时出现异常,将会抛出相应的异常并被捕获。如果出现了FileNotFoundException异常,将会输出“文件不存在”,否则将会输出“读取文件时出现异常”。

示例2:空指针异常

public static void main(String[] args) {
    String str = null;
    try {
        System.out.println(str.length());
    } catch (NullPointerException e) {
        System.out.println("出现空指针异常");
    }
}

上面的代码中,我们将一个变量初始化为null,然后尝试获取这个变量的长度,这将会抛出一个空指针异常并被捕获。如果出现空指针异常,将会输出“出现空指针异常”。

相关文章