情况1:try块中没有抛出异常try和finally块中都有return语句
public static int NoException(){
int i=10;
try{
System.out.println("i in try block is"+i);
return --i;
}catch(Exception e){
--i;
System.out.println("i in catch - form try block is"+i);
return --i;
}finally{
System.out.println("i in finally - from try or catch block is"+i);
return --i;
}
}
执行结果:
i in try block is10
i in finally – from try or catch block is9
the method value is8
执行顺序:执行try块,执行到return语句时,先执行return的语句,–i,但是不返回到main 方法,执行finally块,遇到finally块中的return语句,执行–i,并将值返回到main方法,这里就不会再回去返回try块中计算得到的值
情况2:try块中没有抛出异常,仅try中有return语句
代码:
public static int NoException(){
int i=10;
try{
System.out.println("i in try block is--"+i);
return --i;
}catch(Exception e){
--i;
System.out.println("i in catch - form try block is--"+i);
return --i;
}finally{
System.out.println("i in finally - from try or catch block is--"+i);
--i;
System.out.println("i in finally block is--"+i);
//return --i;
}
}
执行结果:
i in try block is–10
i in finally – from try or catch block is–9
i in finally block is–8
the method value is–9
顺序:try中执行完return的语句后,不返回,执行finally块,finally块执行结束后,返回到try块中,返回i在try块中最后的值
情况3:try块中抛出异常try,catch,finally中都有return语句
代码:
public static int WithException(){
int i=10;
try{
System.out.println("i in try block is--"+i);
i = i/0;
return --i;
}catch(Exception e){
System.out.println("i in catch - form try block is--"+i);
--i;
System.out.println("i in catch block is--"+i);
return --i;
}finally{
System.out.println("i in finally - from try or catch block is--"+i);
--i;
System.out.println("i in finally block is--"+i);
return --i;
}
}
执行结果:
i in try block is–10
i in catch – form try block is–10
i in catch block is–9
i in finally – from try or catch block is–8
i in finally block is–7
the method value is–6
顺序,抛出异常后,执行catch块,在catch块的return的–i执行完后,并不直接返回而是执行finally,因finally中有return语句,所以,执行,返回结果6
情况4,catch中有return,finally中没有,同上,执行完finally语句后,依旧返回catch中的执行return语句后的值,而不是finally中修改的值
情况5:try和catch中都有异常,finally中无return语句
public static int CatchException(){
int i=10;
try{
System.out.println("i in try block is--"+i);
i=i/0;
return --i;
}catch(Exception e){
System.out.println("i in catch - form try block is--"+i);
int j = i/0;
return --i;
}finally{
System.out.println("i in finally - from try or catch block is--"+i);
--i;
System.out.println("i in finally block is--"+i);
//return --i;
}
}
结果:
i in try block is–10
i in catch – form try block is–10
i in finally – from try or catch block is–10
i in finally block is–9
Exception in thread "main" java.lang.ArithmeticException: / by zero
at exception.ExceptionTest0123.CatchException(ExceptionTest0123.java:29)
at exception.ExceptionTest0123.main(ExceptionTest0123.java:17)
执行顺序:在try块中出现异常,到catch中,执行到异常,到finally中执行,finally执行结束后判断发现异常,抛出
情况6:try,catch中都出现异常,在finally中有返回
public static int CatchException(){
int i=10;
try{
System.out.println("i in try block is--"+i);
i=i/0;
return --i;
}catch(Exception e){
System.out.println("i in catch - form try block is--"+i);
int j = i/0;
return --i;
}finally{
System.out.println("i in finally - from try or catch block is--"+i);
--i;
System.out.println("i in finally block is--"+i);
return --i;
}
}
运行结果:
i in try block is–10
i in catch – form try block is–10
i in finally – from try or catch block is–10
i in finally block is–9
the method value is–8
执行顺序:try块中出现异常到catch,catch中出现异常到finally,finally中执行到return语句返回,不检查异常
没有catch,只有try和finally时,执行顺序和上面的几种情况差不多,只是少了catch块的执行
欢迎大家补充指正
最新评论
徒弟可以A师傅,学生可以A老师,为什么外包不能A正式,我觉得很正常。异性相吸这是宇宙真理
PHP天下第一(狗头叼花)
第一个不需要关注公主号直接给激活码的帖子!
客户端超时断开后,服务端如果没有设置超时机制,那也会继续等待处理,万一这期间有消息到了,那不是就接受到消息处理了,但是也没有办法返回到客户端,导致消息丢失。
企业级GO项目开发实战 Kubernetes权威指南 第六版
https://pan.baidu.com/s/1q3bnTncIACKoTZFxvx7BQw?pwd=ii7n
RabbitMQ精讲,项目驱动落地,分布式事务拔高 有吗?
Spring Cloud Alibaba 微服务架构实战 https://pan.baidu.com/s/1jF5voFRoeF0lYAzAPBWSbw?pwd=chqk