在Java中,异常分为两大类:已检查异常(Checked Exception)和未检查异常(Unchecked Exception)。
已检查异常是在编译时必须被捕获或声明的异常。换句话说,如果你的方法可能会抛出某个已检查异常,那么你必须显式地在方法签名中用throws关键字声明它,或者在方法体内捕获这个异常。这种异常通常是外部错误,你的代码无法控制的,例如IOException、SQLException等。它们是从Exception类继承但不是从RuntimeException继承的异常。例如,当你读写文件或访问数据库时,你需要处理这些异常,因为它们表示了一些你应该关心的错误情况。
未检查异常,又称为运行时异常(RuntimeException),是编译器不要求你捕获或声明的异常。这些异常是由程序错误引起的,如空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)、算术异常(ArithmeticException)等。它们通常是程序逻辑错误的结果,编译器不会强迫你处理这些异常,因为它们表明了程序中有应该修正的错误。
何时使用 Checked Exception
1.当你正在编写一个API,并且希望调用者处理一些特定的异常情况时。例如,如果你正在编写一个访问文件系统的方法,你可能希望调用者处理文件不存在的情况,这时你会使用checked exception。
2.当你认为调用者可以采取有意义的措施来恢复从异常情况中,例如,用户可以选择不同的文件或重新连接到数据库。
3.当异常情况是调用者可以预见并且能够处理的时候。
何时使用 Unchecked Exception
1.当你想要抛出一个表示编程错误的异常,如空指针或者数组越界。
2.当你认为异常情况无法被调用者合理地处理时。
3.当你想要抛出一个异常来强制程序员查找潜在的编程错误时。
总的来说,checked exceptions用于表示那些在程序逻辑中需要处理的异常情况,而unchecked exceptions用于表示编程错误。通常建议只在确实需要强制调用者处理某个异常时才使用checked exceptions。在其他情况下,最好使用unchecked exceptions,这样可以让代码更清晰,更易于编写。