【动力节点 Java进阶学习笔记】第四章 异常处理
1、异常的基本概念:什么是异常、异常的作用、异常的存在形式
什么是异常:程序执行过程中的不正常情况。
java中异常的作用是:增强程序健壮性。
java中异常以类和对象的形式存在。异常的发生就是new异常对象
2、异常的继承结构和分类
Object–>Throwable(可抛出的)–>Error(不可处理,直接退出JVM)
-->Exception(可处理的)
Exception下有两个分支:
Exception的直接子类:编译时异常
RuntimeException:运行时异常
异常的继承结构图:
3、编译时异常和运行时异常的定义和区别
编译时异常和运行时异常,都是发生在运行阶段。编译阶段异常是不会发生的。
编译时异常一般发生的概率比较高,必须在编译(编写)阶段预先处理,如果不处理编译器报错
运行时异常一般发生的概率比较低,在编写程序阶段程序员可以预先处理,也可以不管
4、异常的捕获和处理
Java语言中对异常的处理包括两种方式:上抛和捕捉
(1)在方法声明的位置上,使用throws关键字,抛给上一级。
(2)使用try…catch语句进行异常的捕捉:catch (ArithmeticException e)
一般不建议在main方法上使用throws,因为这个异常如果真正的发生了,一定会抛给JVM,JVM只有终止。
可以上抛异常的父类,也可以上抛多个异常(逗号分隔)
catch可以写多个,JDK8 catch支持|来捕捉多个异常:catch(FileNotFoundException | ArithmeticException | NullPointerException e) {}
catch写多个的时候,从上到下,必须遵守从小到大。
5、异常对象两个非常重要的方法:getMessage()和printStackTrace()
获取异常简单的描述信息:getMessage()
打印异常追踪的堆栈信息:printStackTrace()
可用于catch语句中打印异常相关信息,并且不会因为异常影响程序执行
6、finally语句的特性和使用
- 在finally子句中的代码是最后执行的,并且是一定会执行
- try和finally,没有catch可以吗?可以。try不能单独使用。try finally可以联合使用。
- 无论try里执行了return语句、break语句、还是continue语句,finally语句块还会继续执行,我们可以调用System.exit()来终止它
- 如果try语句里有return,那么代码的行为如下:
1.如果有返回值,就把返回值保存到局部变量中
2.执行jsr指令跳到finally语句里执行
3.执行完finally语句后,返回之前保存在局部变量表里的值
7、final finally finalize有什么区别?
final 关键字
final修饰的类无法继承
final修饰的方法无法覆盖
final修饰的变量不能重新赋值。
finally 关键字
和try一起联合使用。
finally语句块中的代码是必须执行的。
finalize 标识符
是一个Object类中的方法名。
这个方法是由垃圾回收器GC负责调用的。
8、如何自定义异常和使用
第一步:编写一个类继承Exception或者RuntimeException.
第二步:提供两个构造方法,一个无参数的(方法体为空),一个带有String参数的(方法体为super();)。