try catch finally执行分析
1、finally中含有return语句
int i = 0;
try {
System.out.println("this is try block");
return 1;
} catch (Exception e) {
System.out.println("this is catch block");
return 2;
} finally {
i = 10;
System.out.println("this is finally block");
return i;
}
未出现异常输出顺序如下:
public static int test(){
int i = 0;
try {
System.out.println("this is try block");
int result = 1/i;
return 1; // throw new Exception("exception");
} catch (Exception e) {
System.out.println("this is catch block");
return 2;
} finally {
i = 10;
System.out.println("this is finally block");
return i;
}
}
出现异常时,输出结果如下:
当将try 中return语句改为throw new Exception(“exception”),结果同上。
2、finally中不包含return 语句
- 正常代码执行
public static int test(){
int i = 0;
try {
System.out.println("this is try block");
return 1;
} catch (Exception e) {
System.out.println("this is catch block");
return 2;
} finally {
i = 10;
System.out.println("this is finally block");
}
}
输出结果如下:
2.代码包含异常情况:
public static int test(){
int i = 0;
try {
System.out.println("this is try block");
int a = 5/0;
return 1;
} catch (Exception e) {
System.out.println("this is catch block");
return 2;
} finally {
i = 10;
System.out.println("this is finally block");
}
}
结果如下:
总结:
代码块中无死循环,或者强制退出,以及程序中止的情况,若finally中有return语句一定会执行该return语句,即使try、catch中已经使用了return语句。否则即使finally对需要返回的变量进行了操作,最终返回的还是以try或者catch返回结果为准。