在 Java 中,Exception
和 Error
都是 Throwable
类的子类,用于表示程序运行过程中可能出现的异常或错误。它们的包结构如下:
1. Exception
包结构
- 包路径:
java.lang.Exception
- 分类:
- 受检异常(Checked Exceptions): 必须显式捕获或声明抛出,否则编译不通过。
- 例如:
IOException
、SQLException
、ClassNotFoundException
。
- 例如:
- 非受检异常(Unchecked Exceptions): 也称为运行时异常,不需要显式捕获或声明抛出。
- 例如:
NullPointerException
、ArrayIndexOutOfBoundsException
、ArithmeticException
。
- 例如:
- 受检异常(Checked Exceptions): 必须显式捕获或声明抛出,否则编译不通过。
- 常见子类:
IOException
RuntimeException
SQLException
InterruptedException
2. Error
包结构
- 包路径:
java.lang.Error
- 特点:
Error
表示严重的系统级错误,通常与程序逻辑无关,应用程序无法处理。- 不需要显式捕获或声明抛出。
- 常见子类:
OutOfMemoryError
: 内存不足错误。StackOverflowError
: 栈溢出错误。NoClassDefFoundError
: 类定义未找到错误。VirtualMachineError
: 虚拟机错误。
3. Exception
和 Error
的区别
特性 | Exception | Error |
---|---|---|
是否可恢复 | 通常可以恢复 | 通常不可恢复 |
是否强制捕获 | 受检异常需要显式捕获或声明抛出 | 不需要显式捕获 |
来源 | 由程序逻辑或外部环境引起 | 由系统或虚拟机引起 |
常见场景 | 文件未找到、网络连接失败、空指针异常 | 内存溢出、栈溢出、类加载失败 |
4. 包结构图
Throwable
├── Exception
│ ├── IOException
│ ├── SQLException
│ ├── RuntimeException
│ │ ├── NullPointerException
│ │ ├── ArrayIndexOutOfBoundsException
│ │ └── ArithmeticException
│ └── ...
└── Error
├── OutOfMemoryError
├── StackOverflowError
├── NoClassDefFoundError
└── ...
结论
Exception
和Error
都是Throwable
的子类。Exception
表示程序可以处理的异常,分为受检异常和非受检异常。Error
表示系统级错误,通常无法恢复,程序无法处理。- 理解它们的包结构和区别有助于编写健壮的程序。
THE END
暂无评论内容