异常处理
基本介绍
异常处理的方式
- try - catch - finally 在代码中捕获的异常自行处理
- throws 将发生的异常抛出,交给调用者(方法)来处理,最*的处理者就是JVM
try - catch异常处理
- 说明
- Java提供try和catch块来处理异常,try块用于包含可能出错的代码,catch块用于处理try块中发生的异常,可以根据需要在程序中有多个try - catch块
- 基本语法
try{
//代码可能有异常
}catch(Exception e){
//捕获到异常
//1.当异常发生时,系统将异常封装成Exception对象e,传递给catch
//2.得到异常对象后自己处理
//3,如果没有发生异常,catch代码块不执行
}finally{
//不管try代码块是否有异常发生,始终要执行finally
//所以,通常将释放资源的代码放在finally
}
- 注意事项
- 如果异常发生了,则异常发生后面的代码不会执行,直接进入catch块
- 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
- 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,是否资源)则使用finally代码块
- 可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullpointerException在前),如果发生异常,只会匹配一个catch
- 可以进行try - finally配合使用,这种方法相当于没有捕获异常,因此程序会直接崩掉/退出,就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑
throws异常处理
- 如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示的声明抛出异常,声明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
- 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常可以是方法中产生的异常类型,也可以是它的父类
注意事项
- 对于编译异常,程序中必须处理,比如try-catch 或者throws
- 对于运行时异常,程序中如果没有处理,默认就是throws方式处理
- 子类重写父类方法时,对抛出的异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常类型的子类型
- 在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws
异常处理