finally{}中有return:如果try正常/或异常,则执行finally{}中的return
如果finally{}中没有return, 如果try{}正常,执行try{}return语句,
如果异常执行catch{}中return语句,但是此事return语句返回在finally{}语句之后
finally{}中有错误,应该是直接退出
—上代码!!
package others;
/**
* finally{}中有return:如果try正常/或异常,则执行finally{}中的return
*
*
* 如果finally{}中没有return, 如果try{}正常,执行try{}return语句,
* 如果异常执行catch{}中return语句,但是此事return语句返回在finally{}语句之后
*
*
* finally{}中有错误,应该是直接退出
*
* @author sshunsun
*
*/
public class TryCatchFinally {
public static void main(String[] args) {
System.out.println(Test1(1));
System.out.println("------------------");
System.out.println(Test1(2));
System.out.println("~~~~~~~~~~~~~~~");
System.out.println(Test2(1));
System.out.println("------------------");
System.out.println(Test2(2));
System.out.println("~~~~~~~~~~~~~~~");
System.out.println(Test3(1));
}
/**
* @param num
* @return finally{}中有return:如果try正常/或异常,则执行finally{}中的return
*
*/
public static String Test1(int num) {
System.out.println("Test1----" + num);
try {
System.out.println("start Try");
if (num == 2) {
throw new Exception(num + "");
}
System.out.println("end Try");
return "return in try";
} catch (Exception e) {
System.out.println("start Catch");
System.out.println("end Catch");
return "return in catch";
} finally {
System.out.println("start Finally");
System.out.println("end Finally");
return "return in finally";
}
}
/**
* @param num
* @return 如果finally{}中没有return, 如果try{}正常,执行try{}return语句,
* 如果异常执行catch{}中return语句,但是此事return语句返回在finally{}语句之后
* finally对最终结果不会有影响!!
*/
public static String Test2(int num) {
int i = num;
System.out.println("Test2----" + num);
try {
System.out.println("start Try");
if (num == 2) {
throw new Exception(num + "");
}
System.out.println("end Try");
return "return in try num:" + i;
} catch (Exception e) {
System.out.println("start Catch");
System.out.println("end Catch");
return "return in catch num:" + i;
} finally {
System.out.println("start Finally");
i = 0; // finally对最终结果不会有影响
System.out.println("end Finally");
}
}
/**
* @param num
* @return
*
*
* finally{}中有错误,应该是直接退出
*/
public static String Test3(int num) {
int i = num;
System.out.println("Test3----" + num);
try {
System.out.println("start Try");
if (num == 2) {
throw new Exception(num + "");
}
System.out.println("end Try");
return "return in try num:" + i;
} catch (Exception e) {
System.out.println("start Catch");
System.out.println("end Catch");
return "return in catch num:" + i;
} finally {
System.out.println("start Finally");
int t = 5 / 0;
System.out.println("end Finally");
return "return in finally";
}
}
}
运行结果:
Test1----1
start Try
end Try
start Finally
end Finally
return in finally
------------------
Test1----2
start Try
start Catch
end Catch
start Finally
end Finally
return in finally
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test2----1
start Try
end Try
start Finally
end Finally
return in try num:1
------------------
Test2----2
start Try
start Catch
end Catch
start Finally
end Finally
return in catch num:2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test3----1
start Try
end Try
start Finally
Exception in thread "main" java.lang.ArithmeticException: / by zero
at others.TryCatchFinally.Test3(TryCatchFinally.java:99)
at others.TryCatchFinally.main(TryCatchFinally.java:23)