Java把异常做为一种类,当作对象来处理。全部异常类的基类是Throwable类,两大子类分别是Error和Exception。数组
系统错误由Java虚拟机抛出,用Error类表示。Error类描述的是内部系统错误,例如Java虚拟机崩溃。这种状况仅凭程序自身是没法处理的,在程序中也不会对Error异常进行捕捉和抛出。spa
异常(Exception)又分为RuntimeException(运行时异常)和CheckedException(检查时异常),二者区别以下:指针
CheckedException:编译期间能够检查到的异常,必须显式的进行处理(捕获或者抛出到上一层)。例如:IOException, FileNotFoundException等等。对象
经常使用关键字:try、catch、throw(抛出一个异常,动词)、throws(声明一个方法可能抛出的异常)、finally。blog
若方法中存在检查时异常,若是不对其捕获,那必须在方法头中显式声明该异常,以便于告知方法调用者此方法有异常,须要进行处理。 继承
在方法中声明一个异常,方法头中使用关键字throws,后面接上要声明的异常。若声明多个异常,则使用逗号分割。虚拟机
如果父类的方法没有声明异常,则子类继承方法后,也不能声明异常。io
若执行try块的过程当中没有发生异常,则跳过catch子句。如果出现异常,try块中剩余语句再也不执行。开始逐步检查catch块,判断catch块的异常类实例是不是捕获的异常类型。匹配后执行相应的catch块中的代码。若是异常没有在当前的方法中被捕获,就会被传递给该方法的调用者。这个过程一直重复,直到异常被捕获或被传给main方法(交给JVM来捕获)。编译
对于try..catch捕获异常的形式来讲,对于异常的捕获,能够有多个catch。对于try里面发生的异常,他会根据发生的异常和catch里面的进行匹配(按照catch块从上往下匹配),若是有匹配的catch,它就会忽略掉这个catch后面全部的catch。引用
若是有finally的话进入到finally里面继续执行。
try ctach fianally 中有return 时,会先执行return ,可是不会返回。在执行完 finally 后 进行返回。
return 的是基本类型数据时, fianlly 里面的语句不会影响 return 的值,
return 的是引用类型数据时,此时已经肯定了要返回对象的地址(地址一),后面 fianlly 里面的能够经过修改前面地址一中的内容修改返回的内容,
可是若是将对象指向另外一个地址(地址二),则不会影响返回的内容。由于返回的对象地址已经肯定为地址一,只能经过修改地址一对象的内容修改返回的信息。