您的位置:首页 > 编程语言 > Java开发

Java基础——try/catch/finally+return

2018-03-21 19:52 441 查看
当try、catch、finally中都有return时,程序是怎么执行的?

看下面的例子:

public static int test() {
int i = 1;
try {
i = 2;
System.out.println("try....");
int j = i / 0;
System.out.println(j);
return ++i;
} catch (Exception e) {
i = 3;

System.out.println("catch..");
return i;
}finally {
i = 4;
System.out.println("finally...");
return i;
}
}


这是运行结果:

try....
catch..
finally...
4


说明最后程序还是从finally中的return返回。

这个问题还可以有很多种情形,下面来分析一下:

因为finally中的代码一定会执行,所以如果finally中有return时,一定从finally中返回,而且如果编写代码时如果在finally外面加return,程序还会报错。具体的分一下几种情形:

try{}catch{}finally{}return;按顺序执行;

try{}catch{}finally{return};按顺序执行;不能在finally外加return,会报错

try{return1}catch{}finally{return2}:没有异常时,先执行到return1之前,再执行finally,从finally返回;有异常时,会执行catch块,最后还是从finally返回

try{return}catch{}finally{}:先执行到return之前,任然还会执行finally,最后去执行return,return的是try中的值

try{return1}catch{return2}finally{}:try中没有异常,从try中返回,有异常从catch中返回,finally总会执行;

总结:1.finally总是会执行2.finally中有return就总是从finally返回;3.若finally中没有return,就按顺序执行,有异常就从catch中返回,没有异常就从try中返回。

看下面两个最重要的情形:

public static int test() {
int i = 1;
try {
i = 2;
System.out.println("try....");
int j = i / 0;
System.out.println(j);
return i;
} catch (Exception e) {
i = 3;
System.out.println("catch..");
return i;
}finally {
i = 4;
System.out.println("finally...");
//return i;
}
}


结果:因为有异常,所以从catch中返回返回的值还是catch中的3,虽然finally执行了,但是返回时是将3暂存在临时变量中的,最后从这个返回值中取。

try....
catch..
finally...
3


public static int test() {
int i = 1;
try {
i = 2;
System.out.println("try....");
return i;
} catch (Exception e) {
i = 3;
System.out.println("catch..");
return i;
}finally {
i = 4;
System.out.println("finally...");
}
}


结果:没有异常时,从try中返回,看出执行顺序是try-finally-return,最后return的值是try中的值。

try....
finally...
2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  try-catch-finally