Java趣味分享:try & finally

考慮如下四個測試方法,它們會輸出什麼?java

public class Test {

    public static void main(String\[\] args) {

        System.out.println(test1());

        System.out.println(test2());

        System.out.println(test3());

        System.out.println(test4());

    }

    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("u1");
        try {
            return user;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            user = new User("u2");
        }

        return null;

    }

    private static User test4() {

        User user = new User("u1");
        try {
            return user;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            user.setName("u2");
        }

        return null;

    }

}

public class User {

    public User(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

}

答案以下:面試

1後端

0多線程

u1架構

u2ide

結論工具

一、無論try,finally都會執行;測試

二、在try中return,在finally執行前會把結果保存起來,即便在finally中有修改也以try中保存的值爲準,但若是是引用類型,修改的屬性會以finally修改後的爲準;this

三、若是try/finally都有return,直接返回finally中的return。spa

推薦去個人博客閱讀更多:

1.Java JVM、集合、多線程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、後端、架構、阿里巴巴等大廠最新面試題

以爲不錯,別忘了點贊+轉發哦!

相關文章
相關標籤/搜索