异常
异常的产生
原方法中出现异常后,如果没有异常处理机制,则把异常传递给main方法处理,main方法不能处理,则传给JVM进行处理,把异常的内容,原因和位置打印并中断程序
Java的异常处理关键字throw
作用:
可以使用throw关键字在指定的方法中抛出指定的异常
使用格式
throw new xxxException(“异常产生的原因”)
注意:
1、throw关键字必须写在方法内部
2、new的对象必须是Exception或它的子类
3、抛出异常后,必须处理该异常
throw关键字后创建的是RunimeException或子类,我们可以不处理,交给JVM
throw关键字后创建的是编译异常,必须处理异常,throw or try-catch
eg:
1、在以后的项目中必须对传过来的参数进行合法性校验,如果参数不合法,我们必须使用抛出异常的方式,告知调用者,传递的参数有问题
2、NullPointerException和ArrayIndexOutOfBoundsException是运行期异常,交给JVM处理
3、Objects.requireNonNull(参数列表);该方法可以帮我们判断处理空指针异常
异常处理的方法throws
throws关键字:异常处理的第一种方法
当内部抛出这个异常时,我们必须处理这个异常对象
可以使用throws关键字处理异常对象,会把dui’xiang声明抛出给方法的调用者(自己不处理,交给别人处理),最终交给JVM处理->中断处理
//使用格式
修饰符 返回值类型 方法名(参数列表) throws AAAException,BBBException...{
throw new AAAException(" ");
throw new BBBException(" ");
}
注意
1、throws写在方法声明处
2、异常必须是Exception或者它的子类
3、抛出了多个异常对象,throws也必须声明多个异常对象
4、如果异常是子父类的关系,只需要写父类即可
5、调用了一个声明抛出异常的方法,就必须处理声明的异常
要么继续thorws交给方法的调用者处理,最终交给JVM处理
要么try…catch自己处理异常
异常处理的方法try-catch
异常处理的第二种方法,try…catch
格式:
try{
可能产生异常的代码
}catch(定义一个异常变量,用于接受try中抛出的异常){
异常的处理逻辑,异常对象出现后,怎么处理异常
工作中一般把异常信息记录到日志中
}
catch(catch可以有多个
}
注意:
1、try中可能抛出多个异常,可以多个catch处理异常
2、如果try中产生了异常,那么就会执行catch的异常处理逻辑,结束后再执行try…catch后的代码,如果try中没有产生异常,那么不会执行catch中异常处理逻辑
finally代码块
try{
可能产生异常的代码
}catch(定义一个异常变量,用于接受try中抛出的异常){
异常的处理逻辑,异常对象出现后,怎么处理异常
工作中一般把异常信息记录到日志中
}
catch(catch可以有多个
}
finally{
无论异常是否出现,都会执行
}
finally关键字不能单独使用,必须和try一起使用
finnaly一般用于资源释放(资源回收),无论程序是否出现异常,最后都要资源释放(IO)
多异常的捕获机制
1、一个try多个catch,如果Exception有父子类关系,子类必须写在上面,否则会报错。
2、运行期异常可以不处理,不捕获也不处理
3、finnaly中如果有return语句,这个return将永远成立,避免这样的事情发生