第一种情况:try{} catch(){} finally{} return;
这种情况是按照正常的顺序执行
public static void main(String[] args) {
int res=test1();
System.out.println("res:"+res);
}
public static int test1(){
int i=12;
try {
int m=1/0;
System.out.println("i:"+i);
}catch (Exception e){
System.out.println("e:"+i);
}finally {
i++;
System.out.println("f:"+i);
}
return i;
}
输出结果:
e:12
f:13
res:13
第二种情况:try{return;} catch(){} finally{} return;
这种情况是程序在执行try中的return时会将返回的值放在一个临时缓冲区中,在这个期间会执行finally中的代码,但是不会影响return值的大小;
public static void main(String[] args) {
int res=test2();
System.out.println("res:"+res);
}
public static int test2(){
int i=12;
try {
return i;
}catch (Exception e){
System.out.println("e:"+i);
}finally {
i++;
System.out.println("f:"+i);
}
return i;
}
输出结果:
f:13
res:12
第三种情况:try{ } catch(){return;} finally{ } return;
这种情况是try语句出现异常的时候,catch代码就捕获这个异常,然后就将返回的值放在一个临时缓冲区里,再执行finally里面的代码块,后面的那个return代码是不会执行的;如果try语句里面没有异常,那就是按照try,finally,return的顺序执行。
public class Return {
public static void main(String[] args) {
int res=test2();
System.out.println("res:"+res);
}
public static int test2(){
int i=12;
try {
int m=1/0;
}catch (Exception e){
i++;
System.out.println("e:"+i);
return i;
}finally {
i++;
System.out.println("f:"+i);
}
return i;
}
}
结果
e:13
f:14
res:13
第四种情况:try{ return; } catch(){} finally{return; }
这种情况是先执行try里面的return语句,将返回的结果放在临时缓冲区中,然后再执行 finally中的代码,因为finally中有return所以会替换掉临时缓冲区里面的值从而提前退出。
public class Return {
public static void main(String[] args) {
int res=test2();
System.out.println("res:"+res);
}
public static int test2(){
int i=12;
try {
i++;
return i;
}catch (Exception e){
i++;
System.out.println("e:"+i);
}finally {
i++;
System.out.println("f:"+i);
return i;
}
}
}
结果
f:14
res:14
第五种情况:try{ } catch(){ return; } finally{return; }
这种情况是先执行try里面的代码,如果没有异常就直接执行finally里面的代码返回结果;如果存在异常的情况就执行catch中的代码,因为里面有return所以会将返回的结果保存到临时缓冲区中,再执行finally中的代码,因为finally中有return所以会替换掉临时缓冲区里面的值从而提前退出程序。
public class Return {
public static void main(String[] args) {
int res=test2();
System.out.println("res:"+res);
}
public static int test2(){
int i=12;
try {
int j=1/0;
}catch (Exception e){
i++;
System.out.println("e:"+i);
return i;
}finally {
i++;
System.out.println("f:"+i);
return i;
}
}
}
结果
e:13
f:14
res:14
第六种情况:try{return; } catch(){ return; } finally{return; }
分为两种情况:
假设try语句中不存在异常,先执行try语句中代码,将返回值放在临时缓冲区中,然后执行finally中代码,因为finally中有return,所以替换掉临时缓冲区中的值然后退出程序;
public class Return {
public static void main(String[] args) {
int res=test2();
System.out.println("res:"+res);
}
public static int test2(){
int i=12;
try {
//int j=1/0;
i++;
return i;
}catch (Exception e){
i++;
System.out.println("e:"+i);
return i;
}finally {
i++;
System.out.println("f:"+i);
return i;
}
}
}
结果
f:14
res:14
假设try语句中存在异常,先执行try语句中代码,然后执行catch中的代码,因为catch中有return,因此将返回值放在临时缓冲区中,然后执行finally中代码,因为finally中有return,所以替换掉临时缓冲区中的值然后退出程序;
public class Return {
public static void main(String[] args) {
int res=test2();
System.out.println("res:"+res);
}
public static int test2(){
int i=12;
try {
int j=1/0;
return i;
}catch (Exception e){
i++;
System.out.println("e:"+i);
return i;
}finally {
i++;
System.out.println("f:"+i);
return i;
}
}
}
结果
e:13
f:14
res:14