前言
Java 异样类(Exception)是用来解决异样程序行为的一组类。在这篇文章中,我将介绍如何应用 Java 异样类,以及在程序中如何设计 Java 异样体系。Exception 类是 Java 体系中十分重要的一环,每一个程序员都必须相熟并把握它。
Java 异样承载的信息量超乎你的设想
Java Exception 的结构设计自身就能够提供给开发者十分多的信息(如果开发者能够失当的利用这一构造)。Exception 构造如下图所示:
Throwable
是整个异样构造的父类,它有两个子类,别离是 Error
和Exception
Java Error
Error
类代表呈现非正常场景,一旦 Error
异样呈现,整个应用程序可能解体。
Java Exception
Exception
和 Error
类不同,当这种类型的异样呈现时,程序是能够尝试复原并持续运行的。Exception 异样有以下两类,运行时异样(Runtime Exception)和非运行时异样(Not Runtime Exception):
非运行时异样也成为 checked 异样,这一类异样和 Error 异样十分相似,二者的区别在于程序在抛出 checked exception 有更高的几率恢复正常。
Checked 和 Unchecked 异样
Checked 异样强制开发者在程序中进行解决或再次抛出。如果 checked 异样被从新抛出,则须要在办法中用 throws 语法申明该异样。与之相同,Unchecked 异样不须要非凡解决。这种设计构造意味着不被动解决的 unchecked 异样将会被抛到根类。
如何在 JAVA 中进行异样解决
Java 中有两种形式解决异样:在以后办法中解决或者是从新抛出。你可能须要一个父异样处理器,或者是执行一些其它特定逻辑,如进行重试。
如上文所示,咱们能够将异样拆分成三类:Checked,Runtime 和 Error。它们别离在不同的场景下抛出,代表程序能够复原的水平。最乐观的是 Checked 异样,Runtime 异样相对而言可复原的可能性更小,最蹩脚的是 Error 类型异样。
在理解了异样的类型后,咱们就能够试着答复以下问题:
- 程序当前情况有多蹩脚?问题的起因是什么?
- 如何修复问题?
- 须要重启 JVM 吗?
- 须要从新编写代码吗?
相熟异样后意味着咱们能够揣测程序是哪里呈现了问题,并且试着修复它。上面的章节会展现几个经典的异样场景并剖析起因(假如程序曾经通过了编译自测阶段)
<!– more –>
剖析 Error 异样
先从最重大的 Error 异样说起。最常见的 Error 异样如下图所示:
在大多数状况下,你只须要批改 JVM 的配置或者增加短少的依赖。当然,也有少部分场景须要对代码进行优化。
剖析 Checked 异样
对于 Checked 异样,它通常代表着程序有可能用某种形式从这种异样中恢复过来,比方重试。下文将会给出几个比拟经典的 Checked 异样,其中有些异样可能是另一些异样的父类,在此将忽视这些异样中的关联进行剖析。
所以,这张表阐明了什么呢?如果你仔细观察,会发现大多数状况下不须要去批改代码,甚至不须要去重启应用程序。
剖析 Runtime 异样
Runtime 异样是最常见的异样。通常来说 Checked 和 Error 异样并不需要代码变更,然而 Runtime 异样通常意味着必须批改代码能力修复这个问题。上面的表格展现了最常见的 Runtime 异样:
可见 Runtime 异样会对程序带来多大的挫伤。它是那个导致代码修复,程序员压力陡增和商业损失的罪魁祸首。
Checked 异样导致的代码净化
依据 Checked 异样的定义,开发者应该将每一个可复原的问题通过 Checked 异样抛出。然而这同时意味着须要在办法定义中强制申明这个异样,以及调用方必须额定减少三四行 try-catch 逻辑来对这个异样进行解决。如果程序中到处充斥着这样的代码片段,会极大影响代码的可读性。因而,我更举荐应用 RuntimeException 进行异样治理。即使是在设计 API 时,也能够通过在办法中定义 Runtime 异样加上正文辅助调用方了解。而 API 调用方则能够本人决定是否要解决这个异样还是持续向上抛出。
原文链接: dzone.com/articles/java-exceptions-1