在Java中,异常分为两大类:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。这两类异常的主要区别在于它们的处理方式和编译器的检查要求。
受检异常(Checked Exception)
受检异常是指在编译时由编译器强制检查的异常。这意味着如果一个方法可能抛出受检异常,那么必须在方法签名中声明该异常,或者在方法内部捕获并处理该异常。常见的受检异常包括IOException
、SQLException
等。
示例:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
File file = new File("nonexistentfile.txt");
FileInputStream fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
在这个例子中,FileNotFoundException
是一个受检异常,必须在代码中显式地捕获和处理。
非受检异常(Unchecked Exception)
非受检异常是指在编译时不由编译器强制检查的异常。这类异常通常是程序运行时错误(如逻辑错误)导致的。非受检异常包括RuntimeException
及其子类,如NullPointerException
、ArrayIndexOutOfBoundsException
等。
示例:
public class UncheckedExceptionExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); // 这将抛出ArrayIndexOutOfBoundsException
}
}
在这个例子中,ArrayIndexOutOfBoundsException
是一个非受检异常,编译器不会强制要求你捕获或声明它。
总结
- 受检异常:必须在方法签名中声明或在方法内部捕获和处理。编译器会强制检查。
- 非受检异常:不需要显式声明或捕获,编译器不会强制检查。