Java的异常体系
Java 的异常体系是基于类继承结构设计的,核心是java.lang.Throwable
类,它是所有错误(Error)和异常(Exception)的根父类。整个体系可分为两大分支:Error(错误) 和 Exception(异常),二者分别代表不同类型的程序问题。
1. 顶层:Throwable
Throwable
是异常体系的顶层类,定义了所有错误和异常的通用属性和方法(如获取异常信息getMessage()
、打印堆栈跟踪printStackTrace()
等)。
其直接子类只有两个:Error
和Exception
。
2. Error(错误)
Error
表示运行时环境的错误,通常是程序无法处理的一些严重问题,由 JVM(Java 虚拟机)生成,与程序本身无关,程序员一般无需捕获或处理。出现这类错误时,程序往往会直接崩溃。
常见的Error
子类:
OutOfMemoryError
:内存溢出(如创建对象过多导致堆内存不足)。StackOverflowError
:栈溢出(如递归调用层数过多)。NoClassDefFoundError
:类定义未找到(编译时存在的类,运行时缺失)。InternalError
:JVM 内部错误。
3. Exception(异常)
Exception
表示程序本身可以处理的异常条件,通常由程序逻辑错误或外部环境问题导致。程序员可以通过异常处理机制(try-catch
)捕获并处理,使程序继续执行。
Exception
又分为两类:受检异常(非运行时异常) 和 非受检异常(运行时异常)。
3.1 非运行时异常
这类异常在编译阶段就必须被强制捕获或者声明抛出,通常是外部错误导致的。
常见的非运行时异常:
IOException
:IO 操作异常(如文件读写失败)。ClassNotFoundException
:加载类时未找到指定类。SQLException
:数据库操作异常。ParseException
:字符串解析异常(如日期格式错误)。
3.2 运行时异常
这类异常在编译阶段是不需要被强制捕获或声明抛出的,通常是由于程序错误所导致的。
常见非受检异常:
NullPointerException
:空指针异常(调用 null 对象的方法)。IndexOutOfBoundsException
:索引越界(如数组、集合访问下标无效)。IllegalArgumentException
:非法参数(方法接收无效参数)。ArithmeticException
:算术异常(如除数为 0)。ClassCastException
:类型转换异常(如将 String 强转为 Integer)。