try和catch以及finally执行顺序
2017-09-01 15:42
288 查看
在项目中经常会用到try、catch、finally等,那么如果我们不了它们的运行顺序以及原理,我们将会做出很多错误的操作,也会让我们的计划失败。
那么现在咱们就用一个例子来掰一掰这个问题(以下均指单线程)。
第一种情况:在程序最后面有一个return
public class Main {
public static void main(String[] args)
{
System.out.print(sum());
}
static int sum(){
int i = 0;
try{
i += 5;
}
catch(Exception e){
i += 6;
} finally{
i += 2;
}
return i;
}
}
结果:i = 7。
原因:程序正常执行先执行try,然后finally,最后return。
第二种:在try和catch和finally都存在return
public class Main {
public static void main(String[] args)
{
System.out.print(sum());
}
static int sum(){
int i = 0;
try{
i += 5;
return i;
}
catch(Exception e){
i += 6;
return i;
} finally{
i += 2;
return i;
}
}
}
结果:i = 7.
原因:当三者都有return时,程序会先执行try中的return,如果不报错,直接执行finally中的i += 2,然后执行finally中的return,将i = 7返回。
第三种:finally中没有return,但是try中有
public class Main {
public static void main(String[] args)
{
System.out.print(sum());
}
static int sum(){
int i = 0;
try{ System.out.print("A");
i += 5;
return i;
}
catch(Exception e){
i += 6;
return i;
} finally{
i += 2;
}
}
}
结果:i = 5;
原因:程序先执行 i+= 5,i 此时变为5,然后try中的return,将 i 存储,变为待返回值,其实这时已经确定了返回值为5,
如果下面没有return的话,那么返回5,即使finally中对 i 进行了操作。
相信你看到这里已经明白怎么做了吧,业务中遇到情景可以根据这三种措施采用不同的处理方式。另外也欢迎大家进行修正和交流。。。
那么现在咱们就用一个例子来掰一掰这个问题(以下均指单线程)。
第一种情况:在程序最后面有一个return
public class Main {
public static void main(String[] args)
{
System.out.print(sum());
}
static int sum(){
int i = 0;
try{
i += 5;
}
catch(Exception e){
i += 6;
} finally{
i += 2;
}
return i;
}
}
结果:i = 7。
原因:程序正常执行先执行try,然后finally,最后return。
第二种:在try和catch和finally都存在return
public class Main {
public static void main(String[] args)
{
System.out.print(sum());
}
static int sum(){
int i = 0;
try{
i += 5;
return i;
}
catch(Exception e){
i += 6;
return i;
} finally{
i += 2;
return i;
}
}
}
结果:i = 7.
原因:当三者都有return时,程序会先执行try中的return,如果不报错,直接执行finally中的i += 2,然后执行finally中的return,将i = 7返回。
第三种:finally中没有return,但是try中有
public class Main {
public static void main(String[] args)
{
System.out.print(sum());
}
static int sum(){
int i = 0;
try{ System.out.print("A");
i += 5;
return i;
}
catch(Exception e){
i += 6;
return i;
} finally{
i += 2;
}
}
}
结果:i = 5;
原因:程序先执行 i+= 5,i 此时变为5,然后try中的return,将 i 存储,变为待返回值,其实这时已经确定了返回值为5,
如果下面没有return的话,那么返回5,即使finally中对 i 进行了操作。
相信你看到这里已经明白怎么做了吧,业务中遇到情景可以根据这三种措施采用不同的处理方式。另外也欢迎大家进行修正和交流。。。
相关文章推荐
- Java异常处理机制以及try-catch-finally-return执行顺序
- 有 Return 的情况下 Try Catch Finally的执行顺序(详细的代码以及解释)
- java中的异常以及 try catch finally以及finally的执行顺序
- Java异常处理机制以及try-catch-finally-return执行顺序
- java中的异常以及 try catch finally以及finally的执行顺序
- Java异常处理机制以及try-catch-finally-return执行顺序
- 各种return情况下try,catch,finally的执行顺序
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 强化与确认基础知识:try catch finally 的执行顺序
- 有return的情况下try catch finally的执行顺序
- try-catch-finally执行顺序
- java中try{}catch{}和finally{}的执行顺序问题
- try catch finally的执行顺序
- try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序
- try catch finally的执行顺序即结果
- try catch finally的执行顺序到底是怎样的?
- Java-try_catch_finally中带有return语句的执行顺序
- 有return的情况下try catch finally的执行顺序