应该是先运行try中return,再运行finally中的代码,又研究了下才发现以前的观点是错的
可以用以下代码证明:
思路:try中的return调用test2();方法是为了打印return运行记录,该方法在执行return时运行。
- package cn.test;
- public class Test2 {
- public static void main(String[] args) {
- String str =test1();
- System.out.println("str:"+str);
- }
- private static String test1() {
- try {
- System.out.println("try");
- return test2(); //运行test2代码块
- } catch (Exception e) {
- }finally{
- System.out.println("finally");
- return "two";
- }
- }
- private static String test2() {
- System.out.println("return run!");
- return "one";
- }
- }
复制代码
运行结果是:
try
return run!
finally
str:two
其中打印的return run!是在try中return执行时输出,再finally之前,说明try中return先运行;其次str的值为two而不为one(打印出了return run!说明try中的return被执行过的)说明one被覆盖了,也证明finally中的代码后执行 |