本文源码:GitHub·点这里 || GitEE·点这里

一、异常简介

优秀的程序代码,都在追求高效,安全,和低错误率,但是程序中的异常是无法避免的,降低异常出现的频率是关键,异常出现如何处理是另一个重要方面,Java体系中异常框架对于系统开发是十分重要的。

面对系统异常时,不要慌乱,异常虽然是错误,也是系统发出的消息,标识系统的缺陷和需要改进的地方。

二、API体系

Java的API中已经定义许多异常类,分为两大类,错误Error和异常Exception,Throwable作为所有异常的超类,如图:

Error:一般为底层的不可恢复的类,一般此类错误都比较严重,JVM将终止其运行的线程;

  • VirtualMachineError:虚拟机运行错误;
  • OutOfMemoryError:内存溢出;

Exception:程序本身可以捕获并且可以预处理的异常,例如捕获或者抛出;

  • RuntimeException:运行时异常;
  • CheckException:已检查异常,编译阶段必须处理;

几个经典的常见的RunTimeException如下:空指针NullPointerException;数组下标越界ArrayIndexoutofBoundsException等。

三、异常处理

Java异常处理关键字,分别是:try、catch、finally、throw、throws。

应该在合适的位置处理异常,异常的处理准则如下:谁知情谁处理,谁负责谁处理,谁导致谁处理。

1、抛出异常

即异常在当前流程下不处理,一种是直接通过方法传递给调用者,throws关键字是用于在方法声明上声明抛出异常类型的,并且一次可以声明抛出多种类型的异常。throw关键字是用于方法的内部抛出一个异常对象,常在业务校验时抛出提示。

需要特别说明的一点,在Spring框架中,事务触发多数是以是否抛出异常为标识来处理的,如果方法在事务控制内,方法内异常捕获但是最终没有抛出,那该事务则无效。

2、捕获异常

通常捕获异常会使用try-catch-finally关键字三连操作:

Try尝试捕获异常:

如果语句依次执行结束,则跳过catch,在存在finally代码块时,则执行否则执行后续流程;

如果捕获异常,则匹配catch中的类型,如果没有与之匹配的catch类型,则该异常交给JVM处理,finally代码会被执行,流程之后的代码不会被执行;

如果捕获异常且存在相匹配的catch类型,则跳到catch代码块执行,finally代码会被执行,执行完finally代码块之后继续执行后续代码;

Catch匹配可能出现的异常类型,并在其中做补偿处理,例如出现异常情况,需要更新一个异常状态等,如果没有catch块,后必须跟finally块,处理资源释放;

Finally无论是否捕获异常,finally代码会被执行,也是面试中常见的异常问题之一,例如在finally代码块return,或者修改返回值等,主要涉及到值传递和引用传递方面。

3、异常日志

复杂的业务系统必备功能,异常日志体系,用来分析运行问题,作为系统不断优化的核心依据,通常会记录如下几块:

  • 异常类型:分析异常发生的关键原因;
  • 异常信息:通常会简单记录e.getMsg输出的内容;
  • 异常位置:快速定位异常发生的位置[类.方法];
  • 业务参数:特定业务参数场景才能复现的问题;
  • 时间节点:有的并发问题是在特定时间段出现;

异常日志记录下来之后,还会定期进行任务分析,不断发现系统容易出问题的地方,然后再不断的改进和优化。

4、熔断降级

在微服务架构系统下,某个服务故障或者异常,触发熔断该服务,避免引发整个微服务链路异常,防止整个系统服务的雪崩。以此缓解服务器资源的的压力,以保证核心业务的正常运行。

四、源代码地址

GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile

编程体系结构(02):Java异常体系相关推荐

  1. java异常体系分类(面试)

    java异常体系分为2类 1.错误(Error),一般与虚拟机.系统有关.这一类的错误无法由程序捕获,程序中断,比如内存溢出. 2.异常(Execption),一般有程序编码或者设计导致的错误,可以由 ...

  2. Java——深入理解Java异常体系

    Java--深入理解Java异常体系 参考文章: (1)Java--深入理解Java异常体系 (2)https://www.cnblogs.com/wugongzi/p/11858228.html 备 ...

  3. java异常体系_Java异常体系(Throwable、Error、Exception)

    Java异常体系 java异常体系继承图 Throwable Throwable类是所有异常的父类,常见的子类有两个Error.Exception. Error Error类就是程序运行时候抛出的最严 ...

  4. java 中的finally你知多少_「JAVA」详述Java异常体系,处理异常时配上finally效果更佳...

    什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般化的情况.在平时生活中,医生 ...

  5. java异常体系_JAVA异常体系结构详解

    一.什么是异常 异常:程序在运行过程中发生由于硬件设备问题.软件设计错误等导致的程序异常事件.(在Java等面向对象的编程语言中)异常本身是一个对象,产生异常就是产生了一个异常对象.      --百 ...

  6. java 异常 抛 效率_一文带你理清Java异常体系,提高开发效率

    一.概述 我们在项目开发的过程中使用异常是必不可少的事情,那么异常会带来哪些好处呢? 我们知道异常带来的最明显的好处是,它能够降低错误处理代码的复杂度.不使用异常的话,我们就必须检查一些特定的错误,并 ...

  7. Java异常处理-----java异常体系

    再三思考后还是决定贴图,csdn的格式,我是真玩不转,对不起了各位,继续将就吧. 错误原因:内存溢出.需要的内存已经超出了java虚拟机管理的内存范围. 错误原因:找不到类文件. 错误(Error): ...

  8. 【Java基础】HashMap扩容 | CopyOnWriteArrayList 的底层原理 | 字节码 | Java 异常体系

    1. HashMap的扩容机制 JDK 1.7 扩容是针对数组进行扩容,链表是不需要进行扩容的.扩容时先生成原来数组两倍大小的新数组,在把原来老数组上的链表上的元素转移过去.具体在转移链表中元素的步骤 ...

  9. java异常体系_Java 异常体系

    1.异常简介 Java把异常作为一种类,当做对象来处理.所有异常类的基类是Throwable类,两大子类分别是Error和Exception. 系统错误由Java虚拟机抛出,用Error类表示.Err ...

最新文章

  1. Linux 忘记root登录密码解决方法
  2. iOS progressive Web App (PWA) 技术
  3. 软件需求分析--三步走
  4. 纠结的velocity log那些事(出现Permission denied)
  5. 微信小程序 小程序源码包括后台完整版分享
  6. 机器人峰会王伟_【“峰”景独好】大美中国探春中国机器人峰会举办地——浙江宁波余姚...
  7. java jespa_Jespa实际运用的一点心得
  8. 【数据结构与算法】快排、归并 O(nlogn) 基于比较
  9. 星座是按阴历还是阳历
  10. JavaScript中对象深复制
  11. 从GitHub存储库下载单个文件夹或目录
  12. python面向对象的编程_不会面向对象,肯定学不好Python!简易的面向对象攻略来啦...
  13. ctf编码,解密总结
  14. Typora常用好看主题推荐
  15. spring框架之IoC理解
  16. 王码五笔86版字根表图与字根助记词
  17. UE4让物体始终朝向摄像机(二)—RInterp To用法
  18. JS 取Json数据中对象特定属性值
  19. uni-app教程二(微信开发者工具运行项目,icon字体使用,组件)
  20. 自动化运行JMeter下的所有脚本

热门文章

  1. linux 批量替换文件内容及查找某目录下所有包含某字符串的文件(批量修改文件内容)
  2. 计算机网络之传输层:2、UDP协议
  3. (软件工程复习核心重点)第六章实现和测试-第五节:确认测试
  4. (王道408考研操作系统)第二章进程管理-第二节1:调度的基本概念及分类以及进程优先级
  5. (王道408考研操作系统)第二章进程管理-第一节2:进程状态及其切换
  6. python之paramiko模块
  7. c++ winpcap开发(8)
  8. Python list合并(列表合并),dict合并(字典合并)
  9. 基于开源蜜罐的实践与功能扩展
  10. SQLAlchemy 教程 —— 进阶篇