异常

异常定义

异常是运行过程中出现的错误

  • 人为错误:填写错误等
  • 随机错误:网络中断、内存耗尽等

一个健壮的程序必须处理各种各样的错误

Java的异常是class

  • Object

    • Throwable

      • Error

        • OutOfMemoryError
      • Exception

        • RuntimeException

          • NullPoiterException
          • IllegalArgumentException
        • IOException

    • 继承关系图

捕获要求

  • Error 及其子类,RuntimeException及其子类不需要捕获
  • Exception及其子类,不包括RuntimeException及其子类

    必须捕获

异常捕获

try、catch、finally

  • try中一般放置可能发生异常的语句

  • catch 捕获异常

    • 多catch则按顺序匹配

      • 匹配到了则不再继续匹配
    • 可以捕获子类异常

    • 一个catch可以捕获多个异常,用”|“合并到一起

  • finally

    • 不论是否发生异常都会执行的代码
    • 不是必须的
    • 总是最后执行

抛出异常

异常的传播

  • 追踪

    • printStackTrace()方法可以打印出调用堆栈

异常的转换

  • 抛出过程中转换了异常类型

    • 用旧异常构建了一个新异常然后抛出

      printStackTrace的时候 关键字为Caused by

try、catch、filnally

  • 一般正常情况,再try中抛出异常,catch捕获异常,final运行保底代码

  • 如果catch中抛出的异常,会在final运行完毕后抛出

  • 异常屏蔽,如果final也抛出异常,将会屏蔽掉catch中的异常

    • 解决方法,使用Trrowable的

      addSupressed()方法。保留被屏蔽的异常信息。

      在捕获处是同getSuppressed()方法获取被屏蔽的异常信息

      printStackTrace的时候 关键字为Suppressed

NullPointerException

最常见的异常

空指针异常

由JVM抛出

如果一个对象为null,调用其方法或访问其字段就会产生

一般避免返回null

  • 字符串使用”“,而不是null
  • 数组返回空数组,而不是null

如果调用方一定要根据null判断,比如返回null表示文件不存在,那么考虑返回Optional

从Java 14开始,如果产生了NullPointerException,JVM可以给出详细的信息告诉我们null对象到底是谁。

小结

自定义异常

在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。

一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。

完整思维导图

参考

www.liaoxuefeng.com

最新文章

  1. shell条件判断中-a至-z的含义
  2. n皇后2种解题思路与代码-Java与C++实现
  3. Eclipse下编写的web项目部署到tomcat下
  4. Populating Display Item Value On Query In Oracle Forms
  5. DEDECMS如何修改数据库密码以及忘记了后台密码怎么办
  6. Spring零碎知识复习
  7. iOSApp -Monkey测试
  8. 【原创】LoadRunner Java Vuser开发环境配置指南
  9. 多备份CEO胡茂华:创业路上的五道坎
  10. QtXlsxWriter
  11. collection系列用法-deque双向队列
  12. iOS SDWEBImage和collectionView的组合,以及collectionView的随意间距设置
  13. 轻量级代码生成器-OnlyCoder 第二篇
  14. LINUX 笔记-ps命令
  15. 最简单的基于DirectShow的示例:获取Filter信息
  16. Git 本地保存账号密码的删除或修改
  17. javascript实现游戏贪吃蛇
  18. Java并发编程(八)-- 死锁
  19. 213. House Robber II(动态规划)
  20. 用C#学习数据结构之线性表

热门文章

  1. Python raise...from... 是啥?
  2. 取地址与解引用 C指针浅析
  3. python---导入模块和包
  4. 不用关闭重启cad及不用更改快捷方式或者版本号c#调试cad插件
  5. Java基础语法01——变量与运算符
  6. C++五子棋(三)——判断鼠标有效点击
  7. 如何使用 python 爬取酷我在线音乐
  8. 2021.08.05 P5357 康托展开模板(康托展开)
  9. 2021.08.01 P3377 左偏树模板
  10. DOM 对象的重点核心