Java趣味分享:try/finally
轉載自?Java趣味分享:try/finally
考慮以下四個測試方法,它們會輸出什么?
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
u2
結論
1、不管try,finally都會執行;
2、在try中return,在finally執行前會把結果保存起來,即使在finally中有修改也以try中保存的值為準,但如果是引用類型,修改的屬性會以finally修改后的為準;
3、如果try/finally都有return,直接返回finally中的return。
總結
以上是生活随笔為你收集整理的Java趣味分享:try/finally的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么做简单的企业网站(怎么做简单的企业网
- 下一篇: Java码农必须掌握的循环删除List元