1. 异常的重要性
没有没有异常的程序
2. JAVA中的异常
A. 异常(Exception)
(1) 编译时的异常checked exception
(2) 运行时的异常runtime exception
B. 错误(Error):错误无法用代码挽回,往往是硬件或者运行环境的问题
3. 调用方法
A. 返回值
B. 返回void
C. 抛出异常
4. 异常处理
A. 捕获这个异常,不让它沿着调用栈继续向下跑出
B. 捕获这个异常,并继续向下抛出
C. 不捕获这个异常,从而导致方法从调用栈中被弹出,异常对象继续抛给调用栈下面的方法
D. 使用throws关键字
try-catch方法,try{有可能发生异常的正常逻辑代码}catch(异常类型变量名){处理}
当try块后面跟多个catch块的时候,如果catch块异常类相互之间没有继承关系,书写顺序是没有规定的,如果catch块内异常类一旦有继承关系,子类应放在父类前面
printStackTrace()打印异常的堆栈信息,开发测试阶段打印出未知信息便于进行代码调整,运行阶段,往往会注释掉
finally块:不管是否发生异常,都会执行代码块
即使有return,continue,break,也会执行finally,除非有system.exit
Finally里面的动作,一般是清理资源,连接关闭,管道关闭的动作
语法细节:
A. Catch块是有顺序可言的
B. Try、catch、finally都不允许单独存在
C. Catch和finally前面必须要有try
5. 编译时异常:在方法的申明后面实现前面,用throws关键字后面跟上会抛出的异常类名表示本方法有可能抛出某几种类型的异常
A. 一个方法的完成申明形式包括了throws,甚至main方法也可以throws
B. 方法的重写的规范被更新,增加:子类被重写方法不能抛出比父类更多的异常,更多指的是范围不是个数
C. 只有在抛出编译时异常的时候,调用才会受到警告,抛出运行时异常,调用者不会受到警告
6. Throw
位置:写在方法体里面,是执行语句
关键字后面内容:异常对象
效果不同:一旦执行到throw语句,会真正的发生一个异常对象被抛出的动作
7. Throws
位置:写在方法申明时的最后,是申明语句
关键字后面内容:异常类的类名(一个或者多个)
本方法有可能抛出某种或者某几种类型的异常,仅在编译期提示调用者,运行期不一定发生
8. 异常的使用方式
A. 调用先人有throw申明的方法,99%马上try-catch
B. 运行时异常
(1) 多做if判断,不让异常有产生的机会
(2) 不是所有的异常都用try-catch比如空指针
(3) 1%情况重点考虑代码流程得到情况
C. Throw或者throws 只有在大型分层项目中,才有可能自己写