Java异常的分类

来自CloudWiki
跳转至: 导航搜索

Bug和异常

你有没有这样的印象,当你想要更新一款 APP 的时候,它的更新日志里总有这么一两句描述:

  • 修复若干 bug
  • 杀了某程序员祭天,并成功解决掉他遗留的 bug

Java2020-5-9.png

作为一名负责任的程序员,我们当然希望程序不会出现 bug,因为 bug 出现的越多,间接地证明了我们的编程能力越差,至少领导是这么看的。

事实上,领导是不会拿自己的脑袋宣言的:“我们的程序绝不存在任何一个 bug。”但当程序出现 bug 的时候,领导会毫不犹豫地选择让程序员背锅。为了让自己少背锅,我们可以这样做:

  • 在编码阶段合理使用异常处理机制,并记录日志以备后续分析
  • 在测试阶段进行大量有效的测试,在用户发现错误之前发现错误

还有一点需要做的是,在敲代码之前,学习必要的编程常识,做到兵马未动,粮草先行。

异常的分类

Java2020-5-10.png

在Java的系统异常中,Throwable是系统异常的父类,其子类有 Error和 Exception。

Error 类异常描述了 Java 运行时系统的内部错误,比如最常见的 OutOfMemoryError 和 NoClassDefFoundError。

导致 OutOfMemoryError 的常见原因有以下几种:

  • 内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
  • 集合中的对象引用在使用完后未清空,使得 JVM 不能回收;
  • 代码中存在死循环或循环产生过多重复的对象;
  • 启动参数中内存的设定值过小;

OutOfMemoryError 的解决办法需要视情况而定,但问题的根源在于程序的设计不够合理,需要通过一些性能检测才能找得出引发问题的根源。

导致 NoClassDefFoundError 的原因只有一个,Java 虚拟机在编译时能找到类,而在运行时却找不到。

Error表示程序运行时发生较少的内部异常,程序无法处理;Exception是程序运行和环境产 生的异常,可以捕获和处理。在开发中遇到的异常绝大部分是 Exception异常

Java2020-5-10.png

参考文档:

[1] https://www.zhihu.com/question/28254987/answer/894034083