异常:java程序执行过程中不正常的情况
注意:开发过程中语法错误不叫异常
异常体系:
java.lang.Throwable
|---Error(错误),在程序中不进行处理
例如:OutOfMemoryError: Java heapspace
StackOverflowError
|---Exception(异常),在程序需要进行处理
|---编译时异常,在javac时候
例如:ArithmeticException
ClassCastException
NullPointerException IndexOutOfBoundsException
|---运行时异常,在java的时候
一旦出现异常,如果不处理,其后的程序就会终止
编译时异常:在编译时出现的异常,必须处理,如果不处理程序编译运行
运行时异常:在程序执行过程中,可鞥会出现的异常,可以处理,也可以不处理
异常处理机制:抓抛模型
抛:抛出异常,一旦程序出现异常,就会jvm自动产生一个对应类型的异常类对象,如果自身不捕获这个异常,提交会抛给方法的调用者;
抓:捕获异常,捕获那个异常类的对象
两种方式:
1.在方法中,自行处理,使用try-catch-finally
2.向上抛出,抛给方法的调用者,让他去处理方法的调用者还可以继续向上抛,直至main方法,使用关键字throws在整个过程中,一旦异常就解决,就ok了
try-catch-finally
try
{
可能会出现异常的代码
}
catch(异常类型1e){
处理对应异常类型1的代码
}
catch(异常类型2e){
处理对应异常类型2的代码
}
....
finally
{
必然会执行的代码
}
注意:
1.try里面定义的变量是局部变量,try里面是可能会出现异常的代码
2.一旦出现异常,其后的代码都不会执行
3.catch使用捕获异常,catch的参数类型如果是这个异常类的对象的类型或者是其父类就能捕获住然后执行之后代码
4.出现异常后,就去自上而下找catch的参数,如果能够捕获,那就执行catch中的代码,如果catch都无法捕获这个异常类,程序就会报错
5.catch可以有多个,但最多会执行一个,如果当多个catch有继承关系的时候,父类写在下面
6.try-catch不能有其他代码
7.异常一旦捕获并处理之后的代码是可以正常执行的,这里说的之后不是try里面的东西
8.打印错误
9.finally可写可不写,一旦写了之后,其中的代码必须只想执行
.不管你是否出现异常,或者catch里面出现异常throws关键字可以显示的声明抛出异常
抛给谁?抛给方法的调用者,方法的调用者可以使用try-catch-finally来解决也可以上抛(接着Throws)
throws的位置:public static voidmethod6()throws 异常类型1,异常类型2 {}
如果在上抛的过程中,这个异常就解决掉,那就ok了