检查性异常:html
(1)最具表明性的检查性异常是用户错误或问题引发的异常,这是程序员没法预测的。 (2)例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略。
运行时异常:java
(1)运行时异常是可能被程序员避免的异常。 (2)与检查性异常相反,运行时异常能够在编译时被忽略。
错误:程序员
(1)错误不是异常,而是脱离程序员控制的问题。 (2)错误在代码中一般被忽略。 (3)例如,当栈溢出时,一个错误就发生了,它们在编译时也是检查不到的。
Error类:数据库
(1)Error类以及他的子类的实例,表明了JVM自己的错误。 (2)错误不能被程序员经过代码处理,Error不多出现。 (3)所以,程序员应该关注Exception为父类的分支下的各类异常类
Exception类:函数
(1)Exception及他的子类,表明程序运行时发送的各类不指望发生的事件。 (2)能够被java异常处理机制使用,是异常处理的核心。
在编写代码处理异常时,对于检查异常,有两种处理方式:spa
(1)使用try...catch...finally语句块处理 (2)在函数签名中使用throws声明交给函数调用者caller去解决
try...catch...finally语句块:code
(1)try块中放可能发生异常的代码; (2)若是执行完try而且不发生异常,则接着去执行finally块代码以及finally以后的代码; (3)若是执行try中代码发生异常,就会尝试匹配catch块; (4)每个catch块用于处理一个异常; (5)异常匹配是按照catch块的顺序从上往下寻找的,只有第一个会匹配到的catch块会被执行。 (6)try块中的局部变量和catch块中的局部变量,以及finally中的局部变量,它们之间不能够共享使用; (7)finally块无论异常是否发生,只要对应的try块执行了,它必定会执行。 (8)finally块一般用来作资源释放操做,关闭文件或者关闭数据库等操做。
throws/throw:htm
(1)若是一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。 (2)throws 关键字放在方法签名的尾部。 (3)throws仅仅是将函数中可能出现的异常向调用者声明,而本身并不处理异常。 (4)采用这种异常处理的缘由多是:方法自己不知道如何处理这种异常,或者说让调用者处理更好,调用者须要为可能发生的异常负责。 (5)也能够使用 throw 关键字手动抛出一个异常,不管它是新实例化的仍是刚捕获到的。 (6)throw语句的后面必须是一个异常对象。