异常有哪些种类,可以举几个例子吗?
参考回答**
Java 中的异常大致可以分为两大类:
- 检查异常(Checked Exception):在编译时必须处理的异常,如通过
try-catch
或throws
声明。例如:IOException
:文件操作时可能出现的异常。SQLException
:数据库操作时可能出现的异常。
- 运行时异常(Unchecked Exception):在编译时不强制处理,通常是程序逻辑错误导致的。例如:
NullPointerException
:访问空引用时抛出。ArrayIndexOutOfBoundsException
:数组索引越界时抛出。
此外,还有一类特殊的异常:
- 错误(Error)
:表示程序无法恢复的严重错误,通常由 JVM 抛出。例如:
OutOfMemoryError
:内存不足时抛出。StackOverflowError
:递归调用过深导致栈溢出。
详细讲解与拓展
1. 异常的继承结构
Java 中异常类的继承关系如下:
java.lang.Throwable
├── java.lang.Exception
│ ├── 检查异常(Checked Exception)
│ └── 运行时异常(Unchecked Exception)
└── java.lang.Error
Throwable
是所有异常的根类,只有其子类(Exception
和Error
)可以被抛出或捕获。-
Exception
:
- 检查异常:直接继承
Exception
,需要显式处理。 - 运行时异常:继承
RuntimeException
,不需要显式处理。
- 检查异常:直接继承
Error
:表示程序的严重问题,不应该捕获或处理。
2. 检查异常(Checked Exception)
-
特点:编译时必须显式处理,否则程序无法通过编译。
-
常见例子:
IOException
:文件或流操作失败时抛出。
SQLException
:数据库操作失败时抛出。-
ClassNotFoundException
:加载一个不存在的类时抛出。
3. 运行时异常(Unchecked Exception)
- 特点:编译时不要求显式处理,但应在运行时通过逻辑避免。
-
常见例子:
NullPointerException
:尝试访问空引用时抛出。
ArrayIndexOutOfBoundsException
:访问数组非法索引时抛出。ArithmeticException
:算术运算异常(如除以零)。
4. 错误(Error)
- 特点:表示严重问题,通常是 JVM 层面的错误,开发者无法处理。
-
常见例子:
OutOfMemoryError
:堆内存不足时抛出。StackOverflowError
:递归调用过深导致栈溢出。
5. 异常的处理
Java 提供了两种处理异常的方法:
- 捕获异常(try-catch块):
- 抛出异常(throws 关键字):
6. 检查异常 vs 运行时异常
特点 | 检查异常 | 运行时异常 |
---|---|---|
编译时处理 | 必须处理,否则编译失败 | 不强制处理 |
适用场景 | 程序外部问题(如文件、数据库) | 程序逻辑错误(如空指针) |
典型例子 | IOException 、SQLException |
NullPointerException 等 |