前言

在Java编程中,异常是无法避免的。当程序发生异常时,会中断当前的流程,转而执行异常处理流程。了解Java异常种类及其使用场景,是我们编写健壮且可靠的程序的关键。本篇文章将介绍Java异常的种类,帮助读者更好地理解异常处理机制。


一、异常是什么?

在Java中,异常是指在程序运行时所发生的错误或不正常的行为。当代码执行遇到异常,会导致程序中断,如果不加处理就会使整个程序崩溃。为了避免这种情况,我们可以使用Java的异常处理机制,将异常捕获与处理。


二、异常的种类

Java异常分为两类:可检查异常(Checked Exception)和不检查异常(Unchecked Exception)。

可检查异常:

可检查异常是指在程序编译时能够被检测到的异常,程序员需要在代码中进行明确的异常处理或通过 throws 关键字将异常抛出给调用者。

以下是 Java 常见的可检查异常类型:

IOException:操作文件或网络连接可能出现的异常;

SQLException:操作数据库出现错误时的异常;

ClassNotFoundException:在使用 Class.forName() 方法时,如果找不到指定的类,就会抛出异常;

InterruptedException:当一个线程被另一个线程中断时,会抛出该异常;

InvocationTargetException:通过反射调用方法,如果该方法抛出异常,则会将该异常包装在 InvocationTargetException 中抛出。

不检查异常:

不检查异常是指在程序运行时才能够被检查到的异常,通常是由于代码逻辑错误或资源问题引起的。

以下是 Java 常见的不检查异常类型:

RuntimeException:程序本身的逻辑错误,如算数异常、数组下标越界等;

IndexOutOfBoundsException:当访问某个集合的数组、列表或字符串时索引越界时引发;

IllegalArgumentException:传递给方法的参数无效时抛出;

NullPointerException:当一个空对象上调用实例方法或访问实例变量时引发的异常。

以下是一个异常处理的示例代码:

import java.io.*;
 
public class ExceptionDemo {
    public static void main(String[] args) {
        try {
            File file = new File("test.txt");
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
        } catch (FileNotFoundException e) {
            System.out.println("The file doesn't exist.");
        } catch (IOException e) {
            System.out.println("Errored reading the file.");
        }
    }
}

在这个示例代码中,我们尝试读取一个文件的内容,并使用 try-catch 语句捕获可能出现的 FileNotFountException 和 IOException。如果文件不存在,程序会输出 “The file doesn't exist.” ,如果读取文件过程中发生 IO 异常,程序会输出 “Errored reading the file.” 。


总结

Java异常处理机制对于编写可靠的程序至关重要。可检查异常需要在代码中显式地进行处理,使程序在编译和运行期间都能够更好地处理异常。而不检查异常则是程序逻辑错误或资源问题引起的异常,需要通过编写健壮的代码来避免异常的发生。