Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将其提交给java运行时系统,这个过程称为抛出(throw)异常。
Exception异常是必须抛的异常,用try...catch捕捉,而RuntimeException异常可以用try...catch捕捉,也可以不捕捉。
Error:称为错误,有Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等等,程序对齐不作处理。
Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显式声明或者捕捉。
RuntimeException:一种特殊的异常,如被0整除,数组下标越界等等,其产生比较频繁,处理麻烦,如果显式的声明或捕捉将会对程序可读性和运行效率影响很大。因此,由系统自动检测并将他们交给缺省的异常处理程序(用户可不必对齐处理)。
Finally语句:
finally语句为异常处理提供一个统一的出口,使得在控制流程捉到程序的其他部分以前,能够对程序的状态做统一的管理。
无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。
通常在finally语句中可以进行资源的清除工作,如:
关闭打开的文件
删除临时文件等等。
throws语句:
java的例外处理机制使得例外事件沿着被调用的顺序往前寻找,只要找到符合该例外种类的例外处理程序。例如:public void method() throws IOException(){}
自定义异常:
使用自定义异常一般有如下步骤:
1、通过继承Java.lang.Exception类声明自己的异常类
2、在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
3、在方法的声明部分用throws语句声明该方法可能抛出的异常。
异常的重写:
重写方法需要抛出与原方法所抛出异常类型一直异常或者不抛异常。
以下摘自:http://blog.csdn.net/hhy62011980/article/details/5548278
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。
throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。
throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。
throws说明你有那个可能,倾向。
throw的话,那就是你把那个倾向变成真实的了。
同时:
1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。
3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。