一 异常
1.概念
1)指程序在执行过程中,出现的非正常情况(不是语法错误),最终会导致JVM的非正常停止
2)Java处理异常的方式: 中断处理
3)异常根类似 java.lang.Throwable 其有两个子类
|
|----java.lang.Error
|
|----java.lang.Exception
|
|---RuntimeException
|
|---除RuntimeException外的其他异常(编译期异常):这和语法错误不同。
2.常用方法
public void printStackTrace()
打印异常的跟踪栈信息
详细信息包括异常的类型、原因以及出现的位置。在开发和调试阶段都要使用printStackTrace。
public String getMessage()
获取发生异常的原因
终于将错误信息提示给用户
public String toString()
获取异常的类型和异常描述信息(不用)
2.Error 子类和 Exception 子类
1)Error
(1)系统内部错误,程序员不能够处理的异常,只能尽量事先避免
(2)不能处理的错误
(a)内存溢出
(b)系统崩溃
...
2)Exception
(1)由于用户或程序员使用不当导致的异常,可以避免,通过代码的方式纠正,使程序继续运行,是必须要处理的。
(2)Exception 分类
(a)编译时期异常(checked 异常)
在编译时期就会检查,如果没有处理,无法通过编译。
(b)运行时期异常(runtime 异常)
在运行时期检查异常,在编译时期编译器不会报错。
3.异常处理的关键字
try、 catch、 finally、 throw、 throws
1)throw
用来抛出一个指定的异常对象
抛出异常具体操作
(1)创建一个异常对象。封装一些提示信息(信息可以自己编写)
(2)需要将异常对象通过throw告知给调用者,throw 用在方法内,用来跑出一个异常对象,传递给调用者,并结束当前方法的执行
(a)格式
throw new 异常类名(参数);
2)throws
将问题标识出来,报告给调用者。如果方法内通过throw跑出了编译时异常,而没有捕获处理,那么必须通过throws进行声明,让调用者取处理
throws用于方法声明之上,表示当前方法不处理异常,而是该方法的调用者来处理异常。
(1)格式
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2...{}
注:若该方法有多种异常情况,可以再throws后面写多个异常类,用逗号隔开。
4.异常处理方式
1)捕捉处理 try...catch
try{
编写可能会出现异常的代码
}catch(异常类型 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
注:try 和 catch 都不能单独使用
2)使用throws继续将问题声明出去
5.多个异常使用捕获处理方法
1)多个异常分别处理
2)多个异常一次捕获,多次处理(常用)
3)多个异常一次捕获,一次处理
注:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的
关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
6.finally 代码块
1)功能
一些特定的代码无论异常是否发生,有需要自行。另外异常会引发程序跳转,防止一些语句执行不到。
注:finally 不能单独使用。
2)格式
try{
编写可能会出现异常的代码
}catch(异常类型 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}finally{
无论异常是否发生都需要运行的代码
}
注:当只有 try 或者 catch 中调用退出 JVM 的相关方法,此时finally中的代码才不会执行。
7.异常注意事项
1)运行时异常可以不做处理,即不捕获也不声明抛出。
2)如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集
3)父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕捉处理,不能声明抛出
4)当多异常处理时,捕获处理,前边的类不能是后边类的父类
5)在 try / catch 后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收。
6)如果finally有return语句,永远返回finally中的结果,避免该情况。
8.常见的几种异常
1)空指针异常
Throwable
|---Exception
|---RuntimeException
|---NullPointerException
2)数组下标越界异常
Throwable
|---Exception
|---RuntimeException
|---IndexOutOfBoundsException
|---ArrayIndexOutOfBoundsException
3)数字转换异常
Throwable
|---Exception
|---RuntimeException
|---IllegalArgumentException
|---NumberFormatException
4)算数运算异常
Throwable
|---Exception
|---RuntimeException
|---ArithmeticException
5)转换异常
Throwable
|---Exception
|---ParseException
9.自定义异常