程序中出现的错误被称为异常;
异常可分为两大类: 编译时异常和运行时异常
当异常发生时,程序一般会作出如下反应:
发生异常的部分产生系统定义的错误信息;
程序意外终止,并将控制权返回操作系统;
程序中所有已分配资源的状态保持不变,这样将会导致资源泄漏。
那么我们就必须对有可能产生的异常进行处理。
对于异常 有两种做法,第一种做法是将异常捕获加以处理 一般格式
try{
…… //监视有可能发生异常的代码段}
catch (异常类型) //捕获发生的异常
{
…… //对异常进行处理
}……
有时候,整个语句块可以产生异常,而其中的某个部分又可能产生另外的异常,而我们需要分别进行处理;这样,就可以通过嵌套try/catch块来完成;
有时候,在try块中的代码段将有可能产生多种不同类型的异常,而我们又需要针对不同的异常类型进行不同的处理方式,那么我们就可以使用多重catch块,来分别捕获不同类型的异常。但是多重catch只能捕获最先发现的一种异常就不加以捕获,进而跳转到finally语句块。
catch块的书写顺序:类层次越低的越往上写,越高的越往下写。
或者将异常直接抛出回避掉异常,不做处理,或者 交给下一步实现 做处理
一般用法
返回值类型 函数名(参数列表) throws 异常类型
(throws用于将函数内部产生的异常抛给主调函数)
{
……
}
or throw (异常类型的实例);(throw语句用于手工抛出异常;)
throws是用来声明一个方法可能抛出的所有异常信息throw则是指抛出的一个具体的异常类型。通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛
简单来说 throws是声明 而throw则是动作
为保证程序不会意外中断,有些被占用的资源就得不到清理,那么就有必要使用finally块加以保护。finally块必须和try块一起使用,不能单独存在
不论是否发生异常,finally块中的语句都会执行。除非finally语句自身存在异常,或者异常出现程序就已经结束。