异常处理
- 什么是异常
Java从编写到运行有两个阶段:编译 运行
编译或运行时出现的错误就是异常
2.异常处理的目的
为了使程序能够编译成功(不处理,源文件无法编译为类文件)
当程序在运行过程发生异常时能够继续有序执行(不处理,程序终止)
3.异常的分类
异常的顶层类为Throwable,
它有两个直接子类:Error , Exception
Error即错误,是由JVM抛出,如(虚拟机错误,内存溢出)等,程序员无法处理,如果发生Error,意味着要重启
Exception即异常,由程序员抛出,可以处理
Exceptioin又分为运行时异常和编译时异常
运行时异常(非受检异常)RuntineException及其所有子类,不处理程序也可以完成编译,如空指针异常,下标越界等。
编译时异常(受检异常)Exception除去RuntineException分支的所有子类,必须处理,不处理的话程序无法编译,由特定方法抛出,如果没有调用这些方法,不能处理。
5个运行时异常
空指针异常:NullPointerException:
只有引用型变量才会这样,因为没有堆内存、
下标越界异常:
ArrayIndexOutOfBoundsException(数组下标越界异常)
StringIndexOutOfBoundsException(字符下标越界异常)
数字格式化异常:
NumberFormatException
类型转化错误异常:
ClassCastException
数学异常:
ArithmeticException
5个编译时异常(不但要记忆异常的名称和含义,还由记忆这个异常是由哪个类哪个方法抛出的)
ParseException DateFormat: Data parse(String)
try块:
包含的是可能发生异常的代码
catch块:
包含的是异常处理的代码,一个try块后可以包含多个catch块,
如果多个catch块有继承关系,则子类必须在父类catch块前面
一个catch块中可以编写多个异常(用 | 分开)
同等级catch块没有先后顺序
怎么处理:记录错误的错误信息(保存到一个日志文件)
finally块:
做最后的收尾工作,一般用来释放资源,不管有没有发生异常,finally块一定会执行,并且会最后执行。
throws 关键字出现在方法声明的最后面,可以声明多个异常,表示调用此方法有可能抛出声明的异常,
throw 关键字出现在方法体内,表示此方法正在向外抛出异常