异常处理
try-catch以及try-catch-finally
try{
//一些会抛出的异常
}catch(Exceptione){
//处理该异常的代码块
}finally{
//最终要执行的代码
}
终止执行,交由异常处理程序(抛出提醒或记录日志等),异常代码块外代码正常执行。try会抛出很多种类型的异常,多个catch块捕获多钟错误。多重异常处理代码块顺序问题:先子类再父类(顺序不对也会提醒错误),finally语句块处理最终将要执行的代码
异常抛出:
需要用到throw和throws
throw:将产生的异常抛出(动作)
throws:在添加方法的时候添加。声明将要抛出何种类型的异常.
案例:public void divide(int one,int two) throwsException{
if(two == 0){
thrownew Exception("两数相除,除数不能为0!!");
else
System.out.println("两数相除,结果为:"+one/two);
}
}
a.能够处理异常:(运用try-catch块处理)
如:try{
divide(5,0);
}catch(Exception e){
System.out.println(e.getMessage());
}
b.无法处理异常:(将异常抛出)
如:public void compute() throws Exception{
....
divide(5,0);
}
自定义异常:
语法:class 自定义异常类 extends 异常类型{
}
Java异常链:
Java中的异常链:
需要用到异常包装,(方便向上抛出异常)
如:接收一个方法抛出的异常并处理。
try{
test();
}catch(自定义异常类 e){
RuntimeExceptionnewExc = new RuntimeException("异常链测试");
newExc.initCause(e);//异常包装
thrownewExc;//向上抛出异常
}
initCause()的作用可以理解成是保存原始的异常,当你想要知道底层发生了什么异常的时候调用getCause()就能够获得原始异常。其实这就形成一个异常链了,这对于你的代码是很有帮助的
异常学习总结:
1、处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
2、在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
3、对于不确定的代码,也可以加上try-catch,处理潜在的异常
4、尽量去处理异常,切记只是简单的调用printStackTrace()去打印
5、具体如何处理异常,要根据不同的业务需求和异常类型去决定
6、尽量添加finally语句块去释放占用的资源