1.异常(http://blog.csdn.net/hguisu/article/details/6155636)
(1)异常的定义
异常是指在运行期间发生的不正常情况,java中用类的形式对不正常情况进行了描述和封装,称为异常类。不同的问题用不同的类进行具体的描述。
问题很多,描述的类也很多,将其共性进行向上抽取,形成了异常体系。
(2)异常的体系
①Error(程序不可处理的)
是由jvm抛出的严重性问题,这种问题发生一般不针对性处理,直接修改程序。
②Exception(程序可以处理的)
(3)Exception的分类
①编译时异常:Exception中除了子类RuntimeException的异常体系。
这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式,都可以针对性的处理
②运行时异常:Exception中的RuntimeException体系。
这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
(4)throw和throws的区别
①throws使用在方法上,throw使用在函数内
②throws抛出的是异常类,可以抛出多个,用逗号隔开,throw抛出的是异常对象。
(5)异常处理的机制
①抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。
②捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的
异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未
找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。
具体格式是:
try
{
//需要被检测异常的diamond
}
catch(异常类1 变量)//该变量用于接受发生的异常
{
//处理异常的代码
}
catch(异常类2 变量)//该变量用于接受发生的异常
{
//处理异常的代码
}
finally
{
//无论是否捕获或处理异常,一定会被执行的代码,当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。
}
(6)异常处理的原则
1.函数内容如果抛出需要检测的异常,那么函数上必须要声明。否则必须在函数内用try catch捕捉,否则编译失败
2.如果调用到了声明异常的函数,要么try catch要么throws,否则编译失败
3.什么时候catch,什么时候throws呢?
功能内容可以解决,用catch
解决不了,用throws告诉调用者,由调用者解决
4.一个功能如果抛出了多个异常,那么调用时,必须有对应的多个catch进行
针对性处理。内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。