try{}catch{}finally{}返回值的比較
阿新 • • 發佈:2018-12-15
注意:以下結果為實際執行結果,結論純屬個人觀點,如有錯誤,請各位大神前輩在評論區留言,看到此文的小夥伴可以去評論區檢視留言,避免陷入誤區。
1.
private static int add() { int x = 1; try { x++; System.out.println("try--"+x); return x; }catch(Exception e) { System.out.println("catch--"+x); return x; }finally { x++; System.out.println("finally--"+x); } } public static void main(String[] args) { System.out.println("return--"+add()); }
執行結果:
try--2 finally--3 return--2
個人觀點:
finally塊裡的程式碼不會影響try塊裡的返回值。
2.
private static int add() { int x = 1; try { x++; return x++; }catch(Exception e) { System.out.println("catch--"+x); return x; }finally { x++; System.out.println("finally--"+x); } } public static void main(String[] args) { System.out.println("return--"+add()); }
執行結果:
finally--4 return--2
private static int add() { int x = 1; try { x++; return ++x; }catch(Exception e) { System.out.println("catch--"+x); return x; }finally { x++; System.out.println("finally--"+x); } } public static void main(String[] args) { System.out.println("return--"+add()); }
執行結果:
finally--4 return--3
個人觀點:
雖然與本次討論的問題無關,但需要稍微注意一下,x++和++x的區別。
3.
private static int add() {
int x = 1;
try {
x++;
return ++x;
}catch(Exception e) {
System.out.println("catch--"+x);
return x;
}finally {
x++;
System.out.println("finally--"+x);
return x;
}
}
public static void main(String[] args) {
System.out.println("return--"+add());
}
執行結果:
finally--4 return--4
編譯器提示:
finally block does not complete normally,在本文最後會解釋。
private static int add() {
int x = 1;
try {
x++;
throw new RuntimeException();
}catch(Exception e) {
System.out.println("catch--"+x);
return x;
}finally {
x++;
System.out.println("finally--"+x);
return x;
}
}
public static void main(String[] args) {
System.out.println("return--"+add());
}
執行結果:
catch--2 finally--3 return--3
編譯器提示:
finally block does not complete normally,在本文最後會解釋。
個人觀點:
如果finally塊裡有return語句,會替代try塊或者catch塊裡的return,成為方法的返回語句。
private static int add() {
int x = 1;
try {
x++;
System.out.println("try--"+x);
}catch(Exception e) {
x++;
System.out.println("catch--"+x);
}finally {
x++;
System.out.println("finally--"+x);
}
return x;
}
public static void main(String[] args) {
System.out.println("return--"+add());
}
執行結果:
try--2 finally--3 return--3
private static int add() {
int x = 1;
try {
x++;
System.out.println("try--"+x);
throw new RuntimeException();
}catch(Exception e) {
x++;
System.out.println("catch--"+x);
}finally {
x++;
System.out.println("finally--"+x);
}
return x;
}
public static void main(String[] args) {
System.out.println("return--"+add());
}
try--2 catch--3 finally--4 return--4
個人觀點:
1.try{}catch{}finally{}如果都沒有return語句,程式碼會一直執行到後面的返回語句。
2.程式碼會順序執行所有沒有異常的語句,知道程式碼結束或return語句。
在上述過程中,當finally塊的包含return語句時,編譯器會顯示警告,有篇部落格對此做了解釋,較好,本文不再贅述,放上鍊接: