finallyに対する理解が徹底しているかどうかを確認するコード
4064 ワード
ちょうどcsdnでfinallyの問題について討論する招待状を見ました。http://bbs.csdn.net/topics/390439078
プログラムコード:
実行結果:
113
分析結果:
プログラムコード:
package test;
public class Test {
public int inc() {
int x;
try {
x = 1;
return x;
} catch (Exception e) {
x = 2;
return x;
} finally {
x = 3;
}
}
public StringBuffer inc(StringBuffer x) {
try {
x.append("1");
x = new StringBuffer();
return x;
} catch (Exception e) {
x.append("2");
return x;
} finally {
x.append("3");
x = new StringBuffer("4");
}
}
public static void main(String[] args) {
int x = new Test().inc();
System.out.println(x);
StringBuffer x1 = new StringBuffer(), x2 = new Test().inc(x1);
System.out.println(x1);
System.out.println(x2);
}
}
最初に見た時は簡単だったと思いますが、プログラムを実行してみたら自分の思っていたものとは違っています。詳しく分析してみました。実行結果:
113
分析結果:
1、int x = new Test().inc();
inc() , int x, try x 1, return x! finally x , inc() ! 1
:x , return , x , !
finally return, 3.
2、StringBuffer x1 = new StringBuffer(), x2 = new Test().inc(x1);
inc(x1) , try x1.append("1");
x1 = new StringBuffer(); x1 :x1 = xx2 = new StringBuffer()
return xx2;
finally xx2.append("3");xx2 = xxx3 = new StringBuffer("4");
new Test().inc(x1) xx2, xx2.append("3")
x1 , x1.append("1");
, , !
:1,1,3