异常概述: 指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
file:///C:/Users/86136/AppData/Local/Temp/enhtmlclip/Image(1).png
Error是系统内部的错误,运行时报错,是系统的问题,是不能通过修改程序来处理的.
Exception是程序员可以根据问题描述可以处理,我们常说的异常处理就是处理Exception.
异常的分类: 可以分为两种,编译时异常和运行时异常
编译时异常: 在编译期间产生的异常,如果编译期间不处理,编译不能通过
运行时异常: 在运行期间产生的异常,编译期间不会产生异常 (RuntimeException)
异常的处理:通常有两种方式处理异常
第一种:.声明处理异常: 将问题标识出来,报告给调用者。
格式: 修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2...{
}
如果方法内通过throw抛出了编译时异常,而没有捕获处理,那么必须通过throws进行声明,让调用者去处理。
关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)
注意事项: 如果方法需要使用throws抛出多个异常来处理异常,假设这多个异常时父子类关系,那么就可以直接只抛父类异常.
第二种:.try...catch 捕获处理异常:
格式:
try{
编写可能会出现异常的代码(监控区)
}catch(异常类型 e ){ (捕获)
处理异常的代码
记录日志//打印异常信息//抛出异常
}
注意事项:
1.try和catch都不能单独使用
2.不管try中是否出现异常,程序还是会往下执行
异常处理的一些注意事项:
1.运行时异常被抛出可以不处理。即不捕获也不声明抛出。
2.如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集。
3.父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
4.当多异常处理时,捕获处理,前边的类不能是后边类的父类
5.在try/catch后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收。
6.如果finally有return语句,永远返回finally中的结果,避免该情况
两种处理方式的选择:
原则:如果该功能内部可以将问题处理,就用try,如果处理不了,交给调用者处理,就是用throws.
区别:
后续程序需要继续运行就用try
后续程序不需要继续运行就用throws
|
|