1. 异常的分类
Java中的异常分为两大类:
- 受检异常(Checked Exception):在编译期需要处理的异常,通常是程序外部因素导致的异常,例如文件不存在(
FileNotFoundException
)、网络连接失败(IOException
)等。受检异常必须通过try-catch
捕获或通过throws
声明抛出。 - 非受检异常(Unchecked Exception):在编译期不需要处理的异常,通常是程序逻辑错误导致的异常,例如空指针异常(
NullPointerException
)、数组越界异常(ArrayIndexOutOfBoundsException
)等。非受检异常继承自RuntimeException
。
2. 异常的继承关系
Java中的异常类都继承自Throwable
,Throwable
有两个主要子类:
- Error:表示严重的系统错误,通常无法通过程序处理,例如内存溢出(
OutOfMemoryError
)、栈溢出(StackOverflowError
)等。 - Exception:表示程序运行时可能出现的异常,分为受检异常和非受检异常。
3. 自定义异常
通常自定义异常继承自RuntimeException
,因为非受检异常不需要在方法签名中显式声明,使用起来更加灵活。例如:
public class MyCustomException extends RuntimeException {
public MyCustomException(String message) {
super(message);
}
}
4. 异常的处理方式
- 捕获异常:使用
try-catch
块捕获并处理异常。try { // 可能抛出异常的代码 } catch (IOException e) { // 处理异常 e.printStackTrace(); }
- 抛出异常:使用
throws
声明抛出异常,或者使用throw
手动抛出异常。throws
:在方法签名中声明可能抛出的异常。public void r