记录一下try/catch/finally的执行,总有点混淆:测试
private static int test1(){ int i = 1; try { return i;//①第一步执行 }catch (Exception e){ e.printStackTrace(); }finally { i = 0;//②第二步执行,执行完后再执行① } return i;//不执行 } private static int test2(){ int i = 1; try { return i;//①第一步执行 }catch (Exception e){ e.printStackTrace(); }finally { i = 0;//②第二步执行 return i;//③第三步执行 } }
private static User test3(){ User user = new User("张三"); try { return user; }catch (Exception e){ e.printStackTrace(); }finally { user = new User("李四"); } return user; } private static User test4(){ User user = new User("张三"); try { return user; }catch (Exception e){ e.printStackTrace(); }finally { user.setName("李四"); } return user; } class User{ private String name; public User(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return "User{" + "name='" + name + '\'' + '}'; } } public static void main(String[] args) { System.out.println("test1返回:"+test1());//结果:1 System.out.println("test2返回:"+test2());//结果:0 System.out.println("test3返回:"+test3());//结果:User{name='张三'} System.out.println("test4返回:"+test4());//结果:User{name='李四'} }
总结:this
1. 不管try执行什么,finally都会执行; 2. 若是在try中执行了return语句,在执行finally以前会将return的结果保存下来,即便在finally中从新赋 值,仍然以try中保存的值 返回,但若是是引用类型,在finally中修改了原来对象中的值,以修改后的值 返回;
3.若是try和finally中都有return,直接返回finally中的值code