try/catch/finally的简单实践

记录一下try/catch/finally的执行,总有点混淆:

  1. 先测试基本类型
    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;//③第三步执行
        }

    }
  1. 测试引用类型
 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='李四'}
 }

总结:

1. 无论try执行什么,finally都会执行; 

2. 如果在try中执行了return语句,在执行finally之前会将return的结果保存下来,即使在finally中重新赋        
    值,仍然以try中保存的值 返回,但如果是引用类型,在finally中修改了原来对象中的值,以修改后的值
    返回;

3.如果try和finally中都有return,直接返回finally中的值

猜你喜欢

转载自my.oschina.net/u/3660989/blog/1810235