一.异常的概念
在Java中,将程序中发生的不正常行为称为异常
举例:
1.算术异常
2.数组越界异常
3.空指针异常
二.异常的体系结构
如上述举例可知,在Java中,不同的异常有着不同的类进行管理,为了方便关联,Java类内
部维护了一个异常的体系结构.
图像:
解释:
1.Throwable:是异常体系的顶层类,其派生出两个重要的子类,Error 和 Exception
2.Error:指的是|ava虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError(栈溢出) 和 OutOfMemoryError(堆溢出),一旦发生回力术。
3.Exception:异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说的异常就是Exception。
三.异常的处理
异常处理的五个关键字:throw、try、catch、final、throws
1.thow
作用:抛出一个指定的异常对象,将错误信息告诉调用者
语法:
举例:
注意事项:
1.throw必须写在方法体内部
2.抛出的对象必须是Exception 或者 Exception 的子类对象
3.如果抛出的是 RunTimeException 或者 RunTimeException 的子类,可以不用处理,直接交给JVM来处理
4.如果抛出的是编译时异常,用户必须处理,否则无法通过编译
5.异常一旦抛出,其后的代码就不会执行
2.throws
功能:异常声明
当方法中抛出编译时异常,编译时就不能通过,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者来处理时,编译就能通过,即当前方法不处理异常,提醒方法的调用者处理异常。
语法格式:
修饰符 返回值类型 方法名(参数列表)throws 异常类型1,异常类型2..{
}
举例:
3.try-catch-final
语法格式及功能:
注意事项:
1.try块内抛出异常位置之后的代码将不会被执行
2.如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到JM收到后中断程序----异常是按照类型来捕获的
final作用:
在写程序时,有些特定的代码,不论程序是否发生异常,都需要执行,比如程序中打开的资源:网络连接、数据库连接、I0流等,在程序正常或者异常退出时,必须要对资源进进行回收。另外,因为异常会引发程序的跳转,可能导致有些语句执行不到,finally就是用来解决这个问题的。
四.异常的处理流程
1.程序先执行 try 中的代码
2.如果 try 中的代码出现异常,就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配
3.如果找到匹配的异常类型,就会执行 catch 中的代码
4.如果没有找到匹配的异常类型,就会将异常向上传递到上层调用者.。
5.无论是否找到匹配的异常类型,finally 中的代码都会被执行到(在该方法结束之前执行).
6.如果上层调用者也没有处理的了异常,就继续向上传递,一直到 main 方法也没有合适的代码处理异常,就会交给JVM 来进行处理,此时程序就会异常终止