异常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:


浙公网安备 33010602011771号