考虑如下四个测试方法,它们会输出什么?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 系列工具教程
以为不错,别忘了点赞+转发哦!