# 异常类的层次结构
- [异常类的层次结构]
# 异常类的层次结构
Java中的异常层次结构以 Throwable
类为根,它是所有错误和异常的超类。Throwable
有两个主要的子类:Error
和 Exception
。
# Throwable
- 所有异常和错误的根类。
- 提供了常用的异常处理方法,如
getMessage()
,printStackTrace()
, 等。
# Error
- 描述Java运行时环境的内部错误和资源耗尽错误。
- 应用程序通常不应该尝试捕获这些错误。
- 例如:
OutOfMemoryError
,StackOverflowError
,NoClassDefFoundError
。
# Exception
- 描述程序运行时可能遇到的条件,应用程序应该捕获这些异常。
- 分为两大类:
Checked Exception
和Unchecked Exception
。
# Checked Exception(受检异常)
- 必须在编译时被捕获或声明的异常。
- 它们通常是由外部环境导致的,程序员应当预测并恰当处理。
- 例如:
IOException
,SQLException
。
# Unchecked Exception(非受检异常)
- 在运行时抛出,不需要显式地捕获或声明。
- 这类异常通常是编程错误,如逻辑错误或滥用API。
- 例如:
NullPointerException
,ArrayIndexOutOfBoundsException
,ArithmeticException
。
# 示例
以下是Java异常类层次结构的一个简化图示:
Throwable
├── Error
│ ├── OutOfMemoryError
│ ├── StackOverflowError
│ └── ...
└── Exception
├── IOException
├── SQLException
├── RuntimeException
│ ├── NullPointerException
│ ├── ArrayIndexOutOfBoundsException
│ └── ...
└── ...
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 异常处理的最佳实践
- 精确处理异常:捕获具体的异常类型,而不是仅仅捕获
Exception
或更一般的类型。 - 避免过度使用受检异常:过度使用受检异常可能会使代码变得冗余。在适当的场合使用非受检异常。
- 及时清理资源:使用
try-with-resources
或finally
块来确保资源的及时清理。 - 合理传播异常:在某些情况下,捕获异常后重新抛出新的异常或将其传播出去可能是合适的。