Java异常
首先程序错误分为三种:
<pre class="hljs" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 0.75em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">1/0
继承结构
首先异常的父类是 Throwable
,然后两个子类, Error
和 Exception
。其中Error(错误)是JVM中系统的异常,这些错误是不可控的,一般程序出现死循环或者线程死锁之类会导致出现此类错误。
然后 Exception
中又分为两大类:运行时异常( RuntimeException
)、非运行时异常( IO异常、SQL异常
等)。 运行时异常
这种系统异常可以处理也可以不处理,所以编译器不强制用try…catch处理或用throws声明。
但是非运行时异常(又称编译异常),如IOException等,这种异常必须要显式的解决或抛出,要么自己try-catch解决,要么把异常抛出去交给jvm来解决,无论如何必须要处理这种异常。 编译器会强制让我们进行处理的
。
那么可以得知:首先 Error中的错误
是我们无法手动处理的,只能通过优化代码等方式调整,然后 Exception中的RuntimeException
是可以不进行try-catch或throws处理的,那么某一层面上可以说这两种错误是 非受查异常
,也就是编译器不会进行检查的异常。
而 Exception中的IOException等
是编译器一定会进行检查且必须让我们手动处理(解决异常或抛出异常给jvm)被称之为 受查异常
。
如何处理异常
运行时异常(系统异常)
不需要预处理,通过规范的代码可以避免产生这种异常
受检异常(编译时异常)
必须预处理,否则编译报错,有两种处理方式 :
- 捕获处理
- 抛出异常
处理异常
<pre class="prettyprint hljs xquery" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">try {
} catch (OneException e) {
} catch (TwoException e) {
} finally {
}
- try中包含了可能产生异常的代码
- t