# 异常类的层次结构

  • [异常类的层次结构]

# 异常类的层次结构

Java中的异常层次结构以 Throwable 类为根,它是所有错误和异常的超类。Throwable 有两个主要的子类:ErrorException

# Throwable

  • 所有异常和错误的根类。
  • 提供了常用的异常处理方法,如 getMessage(), printStackTrace(), 等。

# Error

  • 描述Java运行时环境的内部错误和资源耗尽错误。
  • 应用程序通常不应该尝试捕获这些错误。
  • 例如:OutOfMemoryError, StackOverflowError, NoClassDefFoundError

# Exception

  • 描述程序运行时可能遇到的条件,应用程序应该捕获这些异常。
  • 分为两大类:Checked ExceptionUnchecked 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

# 异常处理的最佳实践

  1. 精确处理异常:捕获具体的异常类型,而不是仅仅捕获 Exception 或更一般的类型。
  2. 避免过度使用受检异常:过度使用受检异常可能会使代码变得冗余。在适当的场合使用非受检异常。
  3. 及时清理资源:使用 try-with-resourcesfinally 块来确保资源的及时清理。
  4. 合理传播异常:在某些情况下,捕获异常后重新抛出新的异常或将其传播出去可能是合适的。
markshuo   |