目录
异常体系
(1)Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception
(2)Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽
等,典型代表:StackOverflowError和OutOfMemoryError
(3)Exception:异常产生后程序员可以通过代码进行处理,使程序继续执行。
继承自 Error 的是错误
继承自 RuntimeException 的是非受查异常
继承自 Exception,但不是RuntimeException 子类的是受查异常
Java针对受查异常要求:
一个方法如果抛出了受查异常,必须通过 throws 声明异常
方法如果抛出的是非受查异常,则可以声明也可以不声明
异常对象的构造方法和常见方法
例:
常见方法:
(1)获取消息内容:getMessage()
(2)将当前异常地调用栈信息打印到控制台上:printStackTrace() printStackTrace(System.err) // 打印到标准错误上
printStackTrace(System.out) // 打印到一般错误上
异常的抛出
在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者
注:
(1)throw必须写在方法体内部
(2)抛出的对象必须是Exception 或者 Exception 的子类对象
(3)如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处
理,直接交给 JVM来处理
(4)如果抛出的是编译时异常,用户必须处理,否则无法通过编译
(5)异常一旦抛出,其后的代码就不会执行
异常的捕获
1. 异常声明throws
处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可
以借助 throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者
处理异常。
注:
(1)throws必须跟在方法的参数列表之后
(2)声明的异常必须是 Exception 或者 Exception 的子类
(3)方法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间用逗号隔
开,如果抛出多个异常类型具有父子关系,直接声明父类即可。
(4)调用声明抛出异常的方法时,调用者必须对该异常进行处理,或者继续使用throws
抛出
2. try-catch捕获并处理
注:
(1)[]中表示可选项,可以添加,也可以不用添加
(2)try中的代码可能会抛出异常,也可能不会
(3)try块内抛出异常位置之后的代码将不会被执行
(4)如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被
处理,继续往外抛,直到JVM收到后中断程序----异常是按照类型来捕获的
(5)try中可能会抛出多个不同的异常对象,则必须用多个catch来捕获----即多种异常,
多次捕获
(6)可以通过一个catch捕获所有的异常,即多个异常,一次捕获(不推荐)
3. finally
注:
finally中的代码一定会执行的,一般在finally中进行一些资源清理的扫尾工作。