异常Exception处理_听韩顺平课笔记

1.异常处理入门

异常:程序运行中的不算致命的问题,却会导致程序提前结束

使用try检测代码块,如果有异常则catch,这样程序即使有异常,也能继续运行

2.异常基本介绍

程序执行中发生的不正常情况称为“异常”,语法错误,逻辑错误不是异常

异常分为:Error(严重错误,程序崩溃),Exception(运行时,编译时)

3.异常体系图(重点)

编译时异常,与运行时异常的区别——发现异常的时机

异常体系结构图

异常体系图小结:

编译时异常,必须处理

4.常见五大运行时异常

空指针异常:

空指针异常实例:

算数异常:除以0

数组下表越界异常:

类型转换异常:

数字格式不正确异常:

5.异常练习

编译异常:在编译期间就必须处理的异常,否则代码不能通过编译

常见的编译异常:

案例:

练习:查看代码是否有问题

6.异常处理机制

异常处理的方式:两种

  • try-catch-finally(释放资源),程序员在代码中捕获发生的异常,自行处理,finally一定会执行,如果没有发生异常,catch代码块不执行
  • throws,将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM。JVM处理异常:1.输出异常信息 2.退出程序
  • 如果程序员没有显示处理异常,默认throws

try-catch-finally解析:

throws解析:

  • JVM处理异常:1.输出异常信息 2.退出程序

7.tryCatch

try-catch简介:

try-catch快速入门:

try-catch细节:

  • 如果异常发生了,异常后面的代码不会执行,直接到catch块
  • 异常不发生,则不会进入catch块
  • finally代码块一定会执行(关闭资源,释放连接)
  • 可以有多个catch,父类异常在后面,子类异常放前面
  • try-finally组合使用,不捕获异常

如果try代码块有多个异常,可以使用多个catch分别捕获处理:

try-finally组合使用,不捕获异常

8.tryCatch练习

练习1:

  • String类型数组,未赋初始值,为null
  • null.equals();空指针异常,后续try中代码不执行
  • finally必须执行,且只有一个返回值,所以返回4

练习2:

  • catch中的++i会执行,但是不return
  • finally一定执行,返回4

练习3:

练习3答案:

  • catch中的++i执行了,但不会直接返回,将i的值保存到临时变量temp中,继续执行finally块
  • finally对i进行自加一操作,输出i=4,finally块执行完毕
  • 返回临时变量temp的值,3

try-catch-finally执行顺序小结:

9.tryCatch最佳实践

练习4:

练习4思路分析:

练习4代码实现:

10.throws入门案例

throws基本介绍:

  • throws可以抛出异常列表

throws快速入门案例:

11.throws使用细节

  • 子类重写父类方法,所抛出的异常类型范围不能大于父类

面试题:

  • 调用的方法有编译异常抛出,则调用该方法的方法也需要异常处理

  • 运行异常有默认处理机制

12.自定义异常

自定义异常基本概念:

自定义异常的步骤:

  • 继承Exception(编译异常)/RuntimeException(运行异常)

自定义异常的使用:

通过构造器,设置异常时的提示信息:

继承RuntimeException的好处:可以使用默认的异常处理机制,没有继承编译异常那么麻烦(调用方法也需要抛出异常)

13.throw VS throws

throw VS throws 一栏表:

  • throws跟的是异常类型,throw跟的是异常对象

测试题:

  • 考点:finally 在 throw 之前执行

14.异常习题1

练习题1:

分析涉及异常:

  • 命令行接收参数,args.length

编码:

15.异常习题2

练习题2:

练习2答案:

  • 没有命令行传值的话,先抛出数组下表越界异常:

练习3:

  • 考点:try中代码抛出异常后,剩余的代码不会执行

练习4:

16.异常处理小结

posted @ 2021-09-14 23:03  CH0701  阅读(244)  评论(0)    收藏  举报