在Java異常處理和return嵌套使用時,執行順序的測試
1.當在try中放置return
代碼:
public class T2 {
public static void main(String[] args) {
T3 t3 = new T3();
t3.say();
}
}
class T3{
public String say(){
try{
return say2();//先執行return
}finally {
System.out.println(2);//再執行finally
return "2";
}
}
public String say2(){
System.out.println(1);
return "1";
}
}
代碼執行結果
測試總結: 當在try塊中執行return。先執行return後面的語句再執行finally 在執行return結束程序 return和finally的執行順序:finally》return
2.在catch中放置return
代碼:
public class T2 {
public static void main(String[] args) {
T3 t3 = new T3();
t3.say();
}
}
class T3{
public String say(){
try{
int i=1/0;
return say("1");
}catch (Exception e){
e.printStackTrace();
return say("2");
} finally {
return say("3");
}
}
public String say(String str){
System.out.println(str);
return str;
}
}
執行結果
測試總結:先執行catch中的return 後的語句 再執行finally語句 在執行return 結束程序 執行順序 catch》finally
3.在try中拋出異常但是 不捕獲異常 向上拋出,並且在finally中執行return
代碼:
public class T2 {
public static void main(String[] args) {
T3 t3 = new T3();
t3.say();
}
}
class T3{
public String say(){
try{
int i=1/0;
return say("1");
}finally {
return say("3");
}
}
public String say(String str){
System.out.println(str);
return str;
}
}
執行結果
測試總結:在try中拋出異常但是 不捕獲異常 向上拋出,並且在finally中執行return 代碼會丟失try中的異常 當註釋 finally中的return執行結果
總結 finally總是在return結束程序之前執行 但是是先在return 緊跟的語句執行之後。 儘量不要在finally中寫return 因爲會導致異常無法拋出到上層。