第十一章 异常
1.异常处理入门
2.异常基本介绍
OOM内存不足
上一节的例子就是运行时异常
3.异常体系图
4.五大运行时异常
NullPointerException空指针异常
当一个对象还没有创建起来就去使用,就会抛出这个空指针异常
ArithmeticException异常
ArrayIndexOutOfBoundsException异常
ClassCastException异常
NumberFormatException异常
5.编译异常
6.异常课堂练习
7.异常处理方式
8.try-catch异常处理(细节)
细节一
细节二
细节三
如果没有异常
如果有异常
细节四
如果父类异常写在了前面,会报错
细节五
这种情况就是不去管异常,但要做一些善后处理
即使没有出现异常,也要进行一些善后处理
但是相当于没有处理异常,程序该崩还是崩
下面是有异常的情况
注意这里先执行finally才会崩,而且最后的继续执行不会输出
下面是没有异常的情况
9.try-catch练习
return只能返回一个值,而finally的返回权限最高
第二题
第三题
finally中的++i没有return
10.try-catch最佳实践
11.throws入门案例
第一条
第二条
这里可以抛给方法中产生的异常,也可以是他的父类。
12.throws使用细节
第一条
如果上面没有异常处理机制会报错
第二条
其实上面默认有句话,虽然我们感觉不到
首先传到调用它的方法名,最后传到jvm,jvm会直接给你挂掉
第三条
这里NullPointerException是RuntimeException的子类
下面这样就会报错
下面还有额外的一个细节
可以这样处理
也可以这样处理
如果是运行异常就不会报错
因为有默认处理机制
13.自定义异常(throw)
最后将message赋给detailmessage,最后detailmessage将输出
输出
如果是编译异常会很麻烦,结果如下所示
14.throw VS throws
15.异常课后作业1
先配置两个参数
下面这个是参数个数不对的情况
下面是参数格式不正确的情况
下面除0的异常
16.异常课后作业2
改成下面这样就没有问题了,因为本身就是字符串,向下转型没有问题
17.异常课后作业3
在main方法中,调用func()中抛出了异常,所以下面的输出A不再执行
因为已经捕获了异常,所以程序不会退出,所以下面的D也执行
18.异常课后作业4
在调用showExce()方法时,会抛出异常,一旦抛出异常,下面的System.out.println(“A”)就不会再执行了。最后的输出D也会执行,因为异常已经被处理,程序不会停止运行。
所以结果也是B C D