Java 中的异常体系非常庞大,但主要分为两大类:检查型异常和非检查型异常,后者通常包括运行时异常和错误(Errors)。整理出一些常见的异常
检查型异常
这些异常在编译时就必须被处理(通过try-catch块捕获或声明抛出)。
IOExcepton:
- 当发生输入输出错误时抛出。这个异常是所有输入输出异常的基类,用于处理文件读写、网络通信等输入输出操作中的错误。
SQLException
- 当使用JDBC进行数据库操作时遇到问题时抛出。这个异常提供了数据库错误的信息,包括SQL状态码、错误码和错误消息等。
ClassNotFoundException
- 当应用程序试图加载类,但在类路径中找不到相应的类定义时抛出。这通常发生在动态加载类时,如使用
Class.forName()
方法。
- 当应用程序试图加载类,但在类路径中找不到相应的类定义时抛出。这通常发生在动态加载类时,如使用
InterruptedException
- 当线程在等待、睡眠或被其他线程中断时抛出。这个异常用于表示线程在等待过程中被中断,需要线程处理中断逻辑。
FileNotFoundException
- 当试图打开指定路径的文件时,如果文件不存在,则抛出此异常。它是
IOException
的一个子类。
- 当试图打开指定路径的文件时,如果文件不存在,则抛出此异常。它是
运行时异常
NullPointerException
- 当应用程序试图在需要对象的地方使用
null
时抛出。这是最常见的运行时异常之一,通常是因为没有正确地初始化对象。
- 当应用程序试图在需要对象的地方使用
ArrayIndexOutOfBoundsException
- 当访问数组的索引超出其界限时抛出。这个异常通常是因为数组索引计算错误或越界访问。
ArrayStoreException
- 当试图将类型为不兼容类型的对象存入一个对象数组时抛出。例如,尝试将字符串存入一个整数数组中。
ClassCastException
- 当尝试将对象强制转换为不是实例的子类时抛出。这个异常通常发生在类型转换错误的情况下。
IllegalArgumentException
- 当向方法传递非法或不适当的参数时抛出。这个异常用于表示方法接收到了无效或不合适的参数。
IllegalStateException
- 当在非法或不适当的时间调用方法时抛出。这个异常通常用于表示对象的状态不允许执行该方法。
StringIndexOutOfBoundsException
- 当使用索引值访问字符串中的字符时,如果索引值无效(即小于0或大于等于字符串长度),则抛出此异常。
NumberFormatException
- 当尝试将字符串转换为一种数值类型,但该字符串没有有效的格式时抛出。这个异常通常用于处理字符串到数字的转换错误。
ConcurrentModificationException
- 当在迭代过程中(如使用
for-each
循环或迭代器)以非线程安全的方式修改集合时抛出。这个异常用于并发修改检测。
- 当在迭代过程中(如使用
错误
OutOfMemoryError
- 当JVM没有足够的内存来为对象分配内存时抛出。这个错误通常发生在堆内存耗尽时,是严重的资源问题。
StackOverflowError
- 当应用程序递归太深而导致调用栈溢出时抛出。这个错误通常发生在无限递归或深层递归调用中。
NoClassDefFoundError
- 当Java虚拟机试图加载类(在运行时,而不仅仅是编译时),但未找到时抛出。这个错误通常发生在类路径设置不正确或类文件损坏时。
LinkageError
- 这是一个链接时错误的基类,包括
ClassCircularityError
、NoClassDefFoundError
、NoSuchFieldError
等。它表示类定义中存在一些不兼容的类版本或依赖问题。
- 这是一个链接时错误的基类,包括