您的位置 首页 java

“全栈2019”22篇Java异常学习资料及总结

难度

初级

学习时间

10分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

友情提示

  • 本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
  • 本章内容针对零基础或基础较差的同学比较友好,可能对于有基础的同学来说很简单,希望大家可以根据自己的实际情况选择继续看完或等待看下一篇文章。谢谢大家的谅解!

《“ 全栈2019 ”Java异常》学习资料目录

温馨提示

如果只是看 《“全栈2019”Java异常》 系列的全部文章链接的话,请大家只看上面的目录部分。

下面的总结部分就是将每篇文章的总结汇总起来,说实话不建议大家只看下面的总结,建议大家去需要了解的文章查看具体内容,然后结合文章具体内容来体会总结要点。

《“全栈2019”Java异常》总结

通过这几天的学习,我们掌握了Java异常的用法,在 一章中知道了 异常是在程序执行期间发生的事件,它会破坏程序指令的正常流程

在Java中,我们把程序发生的异常(或发生的错误)用类来描述,这样的类被称为异常类(异常类型)。

在 一章中,我们了解到,当异常出现时,我们可以使用try-catch异常处理程序来处理它:

其中:

  • try里存放的是有可能发生异常的代码块。
  • catch负责捕获异常。

我们可以在catch子句里面放所有异常类, Throwable类是Java语言中所有错误和异常的父类 。当然了, Exception是一个普通的Java异常类,它是所有异常类的父类,同时它也是Throwable的子类

接着,我们在 一章中学习了try代码块的作用域。

定义在try代码块内的成员只能在本作用域中被访问。

定义在try代码块外的成员可以被try代码块访问。

同样的,我们在 一章中学习到了catch代码块的作用域。

定义在catch代码块内的成员只能在本作用域中被访问。

定义在catch代码块外的成员可以被catch代码块访问。

接着,我们在 这一章学习了finally关键字,知道了什么是finally:

finally代码块总结有以下4点:

  • finally代码块是在try代码块退出时必须执行的代码块。
  • finally代码块是在try代码块正常执行完毕后执行。
  • 我们又得知finally在try遇到异常退出时,在正确匹配到异常的catch代码块执行完毕之后执行。
  • fianlly在try代码块即使遇到异常退出,catch也没有捕获到该异常的情况下,依然会执行。

然后,我们在 一章中学习了finally作用域。对于finally的作用域,我们有两点需要注意:

定义在finally代码块内的成员只能在本作用域中被访问。

定义在finally代码块外的成员可以被finally代码块访问。

紧接着,我们在 一章中探讨了try-catch-finally三者之间的组合方式,得出以下结论:

  • try代码块不能单独出现。
  • catch代码块不能单独出现。
  • finally代码块不能单独出现。
  • try-catch代码块可以组合。
  • try-finally代码块可以组合。
  • catch-finally代码块不能组合。
  • try-catch-finally代码块可以组合。

这里展示可以组合的代码块:

try-catch代码块可以组合。

try-finally代码块可以组合。

try-catch-finally代码块可以组合。

紧接着,我们在 一章中学习了throw关键字,知道了如果我们自己不知道或者不适合处理该异常时,可以使用throw关键字将其抛出:

对于throw关键字也有3点需要注意的地方:

  1. throw关键字作用是抛出一个异常。
  2. throw关键字可抛出Throwable类或子类对象。
  3. throw关键字抛出的异常处理方式有两种:try-catch和throws。

学完了throw关键字,怎么能少了throws关键字呢?在 一章中介绍了throws关键字。

throws关键字用于声明在当前定义的成员方法中所有需要抛出的异常。

两个关键字都学习完了,自然需要了解它们之间有何不同,在 一章中学习它们的区别:

  1. throw与throws定义不同
  2. throw后面跟的是异常对象;throws后面跟的是异常类型
  3. throw作用在作用域内部;throws作用在成员方法上
  4. throw抛出的非运行时异常需要throws声明在方法上
  5. throw抛出运行时异常不需要throws声明在方法上

在继承关系中,我们throws声明的异常列表会些变化,在 一章中介绍了这一系列变化和注意事项:

  • 重写方法时只能抛出父类异常子集。
  • 当重写方法时,只能抛出父类方法声明的异常列表中的异常,不能抛出新异常。
  • 只要我们子类中不抛出异常,那么就没有必要声明异常。
  • 当重写方法时,子类方法中出现新异常,只能try-catch,不能抛出。
  • 当重写方法时,子类方法不能抛出父类方法异常的父类。

接着,我们在 一章中了解到catch实际上是通过异常匹配来决定执行哪一个。

  • 当异常被抛出时,异常处理系统会按照catch的书写顺序找出参数与异常类型相匹配的第一个处理程序(catch),然后进入catch子句执行,此时异常得到了处理,之后不再继续查找。
  • 异常匹配时,不需要异常类型和catch参数类型完全一致,是catch参数类型的子类也可以匹配到。
  • 单个catch块可以处理多种类型的异常。此功能可以减少代码重复并减少捕获过于宽泛的异常。
  • 在catch子句中,指定块可以处理的异常类型,并使用竖线(|)分隔每个异常类型。
  • 多个catch时,父类异常放在最后。

然后我们在 一章中学习到了使用printStackTrace()方法打印异常跟踪信息。

  • printStackTrace()方法是将栈轨迹给打印出来,实际上记录方法的调用链。
  • StackTraceElement类里面记录了栈轨迹中元素的信息,包括文件名、方法名和行号(在哪一行调用的方法)。

将异常打印在控制台怎么能行呢,所以我们又在 一章中学习了如何将异常输出到文本文件中。

  • 在实际项目中,我们对于异常的处理不光要记录在日志中,而且还要写入文件中,然后将其存储起来。
  • 我们有些程序崩溃了之后,要求你上报错误信息,这都是在收集错误信息,收集它们是为了研发和改进我们的程序。
  • 借助printStackTrace​(PrintWriter s)方法实现将异常信息记录在文本文件中。

异常不止一个,当多个异常接连不断地被抛出,它们之间又是紧密相连的,怎么才能让异常之间产生关联呢? 一章中学到了异常链,通过异常链将异常之间连接起来。

  • 异常链非常重要,在我们日常开发中基本上都会碰到。学会看懂异常链是一项必备技能,它能够让你在调试大型应用时处理异常更加容易。
  • 我们抛出第一个异常,然后我们捕获到了第一个异常,在catch代码块里面处理该异常时,又抛出了新异常,这个新异常就是第二个异常,再通过某种方式将第一个异常和第二个异常连接起来,于是我们的异常链就做起来了。
  • 捕获一个异常后抛出另一个异常,并且把原始异常信息保存下来,这被称为异常链。

Throwable是所有异常的父类,我们在 一章中对它进行了学习。

  • Throwable类是Java语言中所有错误和异常的父类。
  • catch参数类型必须是Throwable类或其子类。
  • 只有Throwable类或其子类对象才能被throw抛出。
  • 出于编译时检查异常的目的,Throwable和Throwable的任何子类(除Error和RuntimeException的子类)都被视为已检查的异常。
  • 使用printStackTrace()方法打印堆栈跟踪信息。
  • 捕获一个异常后抛出另一个异常,并且把原始异常信息保存下来,这被称为异常链。
  • initCause​(Throwable cause)方法仅仅是用来覆盖之前的原因(Throwable对象)。而且希望的是你能够捕获低级异常抛出高级异常,抛出高级异常的同时可以使用initCause​(Throwable cause)方法覆盖掉原先的原因(Throwable对象)。
  • 使用getCause()方法获取原因(Throwable对象)。
  • 使用getMessage()方法获取Throwable详细信息。

Error是所有错误的父类,我们在 一章中进行了学习。

  • Error是错误。它是Java异常体系中的一种。
  • Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题。
  • 当我们遇到Error时,我们不应该去使用try-catch捕获它,也不应该throws将错误抛出去。
  • OutOfMemoryError是内存溢出错误。
  • 实际开发中我们碰到OutOfMemoryError的时候就会去分析我们的程序代码,找出那个产生OutOfMemoryError的源头,修正程序。

Exception是所有异常的父类,我们在 一章中进行了学习。

  • Exception类及其子类是Throwable的一种形式,它表示合理的应用程序可能想要捕获的条件。
  • Exception类及其子类(除RuntimeException类及其子类)都是已检查的异常。
  • 在异常中,我们最常用的方法只有两个:printStackTrace()方法和getMessage()方法。
  • 最常见的Exception子类(除RuntimeException类及其子类)是IOException类及其子类。

RuntimeException是所有运行时异常的父类,我们在 一章中进行了学习。

  • 运行时异常是在Java虚拟机的正常运行期间可以抛出的那些异常。
  • 运行时异常就是在应用程序运行期间抛出的异常。
  • 检查的意思就是看你对这些已检查的异常有没有进行try-catch或throws处理。
  • 已检查的异常就是应用程序中可以预测和恢复的异常。
  • 未检查的异常就是应用程序中无法预测和恢复的异常。
  • Error及其子类和RuntimeException及其子类都是未检查的异常。
  • 未检查的异常在编译时乃至在运行时,都不需要你强制使用try-catch或throws对其处理。
  • RuntimeException是所有运行时异常的父类。
  • 实际开发中,我们接触到最多的未检查的异常就是RuntimeException及其子类。例如:ClassCastException(类型转换异常)和NullPointerException(空指针异常)。
  • 将对象强制转换为不是实例的子类就会发生类型转换异常。
  • 当使用的对象为null时就会抛出NullPointerException。
  • 其实在实际开发中碰到NullPointerException,我们认为这些都是编程错误,应该手动排查错误,去修改。也就是说,不建议使用try-catch或者throws,建议手动查找出错的地方,更正程序代码。

因为现有的异常类不满足我们的需求,所以我们需要自己自定义异常,我们通过 一章了解到,自定义异常不仅仅是继承Exception,你还可以继承Error和RuntimeException。

  • 现有的异常类不满足我们的需求时,就需要自定义异常。
  • 如果我们想自定义异常,那么就得加入异常这个体系中去。
  • 加入异常体系的具体操作是继承异常类。
  • 当我们要定义的异常是可以提前预测的,而且还能通过try-catch或throws处理后,程序还能从异常情况中恢复到正常运行中来,这种情况就可以加入已检查异常阵营。
  • 加入已检查异常阵营,即继承Exception类及其子类。
  • 当应用程序外部发生异常时,可以加入“错误”阵营,继承Error类及其子类。
  • 当应用程序内部发生异常时,可以加入“运行时异常”阵营,继承RuntimeException类及其子类。
  • 应用程序内部发生可预测可恢复的异常请继承Exception类及其子类。
  • 应用程序外部发生不可预测不可恢复的异常请继承Error类及其子类。
  • 应用程序内部发生不可预测不可恢复的异常请继承RuntimeException类及其子类。

finally也有不被执行的情况,具体请阅读 一章。

  • finally在try或catch代码块里面遇到System.exit()语句不会被执行。
  • finally在try代码块里面遇到return语句照样执行。
  • finally在catch代码块里面遇到return语句照样执行。

try-with-resources语句是在JDK7里面出现的新特性,了解详情请阅读 一章。

  • try-with-resources语句是一个声明一个或多个资源的try语句。
  • 资源是在程序完成后必须关闭的对象。
  • 我们有了try-with-resources语句,只是给了我们一种更好的选择,而不是去完全替代finally。
  • 我们的finally代码块还是可以跟在后面,它还是那个finally,它依然有它发挥的作用,应该和try-with-resources语句相互配合,写出更加优秀高效的代码。
  • 只有实现java.lang.AutoCloseable的任何对象(包括实现java.io.Closeable的所有对象)才可以放在try-with-resources语句中。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

版权声明

原创不易,未经允许不得转载!

文章来源:智云一二三科技

文章标题:“全栈2019”22篇Java异常学习资料及总结

文章地址:https://www.zhihuclub.com/176783.shtml

关于作者: 智云科技

热门文章

网站地图