考慮如下四個測試方法,它們會輸出什麼?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
推薦去個人博客閱讀更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
以爲不錯,別忘了點贊+轉發哦!