异常
1.JAVA异常体系
(1)Throwable类(表示可抛)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常;其中异常类Exception又分为运行时异常和非运行时异常,这两个异常有很大区别,运行时异常也叫非受检异常;非运行时异常也叫受检异常
(2)Error是程序无法处理的错误,它是由J八VM产生和抛出的,比如OutofMemoryError、ThreadDeath等,这些异常发生时,一般会选择线程终止
(3)Exception是程序本身可以处理的异常,对于这类异常,程序应当尽可能去处理
(4)运行时异常都是RuntimeException类以及其子类异常,比如NullPointerException、ArraylndexOutofBoundsException等,这些异常也是不接受检查异常,程序可以选择处理,也可以选择不处理,这类异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生
(5)非运行时异常都是除RuntimeException类以及其子类异常之外的类,这些类都属于Exception关,都是要接受检查的异常,比如IOException、sQLException,从程序语法角度是这类异常是必须要进行处理的异常,如果不处理,程序就不能编译通过
2.异常处理方式以及差别
(1)try catch处理方式,如果try代码块中的代码运行出现错误,那么catch代码块中的代码执行,但不影响后边代码运行
(2)throws处理方式向外抛出异常,让之后一个接收到该异常的方法去处理
3.try-catch代码块
try{可能出现异常的代码
}catch(异常类型){当产生对应异常类型时,会执行catch中代码
}finally{无论如何都会执行的代码
}
4.try-catch的使用
(1)try、catch、finally三个语句均不能单独使用,三者可以组成,try...catch、try..finally、try ...catch....finally三种结构,其中catch可以有多个, finally语句最多一个
(2)try,catch、finally三个代码块中变量的作用域为代码内部,分别独立而不能相互访问,如果要在三个块中使用,则需要把变量定义到这些块之外
(3)多个catch块,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会再执行其他catch块代码,且匹配catch语句的顺序是从上到下,也可能所有的catch块都不执行
(4)先catch子类异常再catch父类异常
(5)finally语句是无论try中有没有发生异常,都会执行的语句块,一般finally是程序提供的一个统一的出口,保证程序转到其他部分继续执行,finally通常做一些清除工作,如关闭文件,关闭资源等