Java异常详解
- 异常分类
- 1.Throwable
- 2. Error(错误)
- 3. Exception(异常)
- 3.1 运行时异常 RuntimeException
- 3.2 编译时异常(受检查异常)ClassNotFoundException + IOException
- 4.常见的运行时异常
- 5.异常如何处理
- Java 的异常处理是通过 5 个关键词来实现的:try、catch、throw、throws 和 finally。
- 5.1异常关键字
- 5.2 异常处理方法
- 5.2.1 声明异常 throws关键字 (不能处理Error和运行时异常)
- 5.2.2 抛出异常 throw关键字 一般放在方法体里面
- 5.2.3 捕获异常 try/catch/finally关键字 (经常用来处理运行时异常)
- 5.2.4 自定义异常
- 5.2.5 最佳实践
- 1. 优先捕获最具体的异常类,将不太具体的 catch 块添加到列表末尾
- 2. 在 finally 块中清理资源
- 3.优先明确异常
- 6.try、catch、finally使用
异常分类
1.Throwable
概念:Throwable 是 Java 语言中所有错误与异常的超类。(详细如上图所示)
- Throwable 包含两个子类:Error(错误)和 Exception(异常)
- Throwable 包含了其线程创建时线程执行堆栈的快照,它提供了 printStackTrace() 等接口用于获取堆栈跟踪数据等信息。
2. Error(错误)
定义: 发生时候应用程序是不会处理此类错误的
Error 类及其子类是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。
特点:
此类错误一般表示代码运行时 JVM 出现问题。
通常有 Virtual MachineError(虚拟机运行错误)、NoClassDefFoundError(类定义错误)等。
比如 OutOfMemoryError:内存不足错误;StackOverflowError:栈溢出错误。此类错误发生时,JVM 将终止线程。
总结:
这些错误是不受检异常,非代码性错误。因此,当此类错误发生时,应用程序不应该去处理此类错误。按照Java惯例,我们是不应该实现任何新的Error子类的!
3. Exception(异常)
Exception是程序本身可以捕获并且可以处理的异常
Exception 这种异常又分为两类:运行时异常 和 编译时异常
。
受检异常:除 RuntimeException 及其子类外,其他的 Exception 异常都属于受检异常
非受检异常:该类异常包括运行时异常(RuntimeException极其子类