- public class TestD {
- public static void main(String[] args) {
-
- System.out.println(ex());
-
- }
- public static String ex(){
- String a = "null";
- try{
-
- throw new Exception();
-
- }catch (Exception e){
- a = "catch";
- return a;
-
- }finally {
- a="finally";
- return a;
- }
- }
- }
复制代码
首先,主函数调用方法ex();然后执行try语句,抛出一个异常,异常被catch捕获,执行catch中的语句,执行完a = "catch";之后,a 的值变为catch,然后发现下一条语句是return,因此直接执行fianlly语句,然后执行finally语句中的return语句结束方法。所以结果为finally。
- public class TestD {
- public static void main(String[] args) {
-
- System.out.println(ex());
-
- }
- public static String ex(){
- String a = "null";
- try{
-
- throw new Exception();
-
- }catch (Exception e){
- a = "catch";
- return a;
-
- }finally {
- a="finally";
-
- }
- }
- }
复制代码
在这段代码中执行顺序是首先,主函数调用方法ex();然后执行try语句,抛出一个异常,异常被catch捕获,执行catch中的语句,执行完a = "catch";之后,a 的值变为catch,然后发现下一条语句是return,直接执行finally语句,然后执行a=“finally”;执行之后执行catch中的return,这里请注意,这里返回的是catch中的a值,也就是返回值是catch,原因是当执行到程序return语句时,发现是返回语句,但是finally必须被执行,所以这里return语句被暂停,执行finally语句,执行完之后,返回暂停的语句,所以这里的a值并没有被改变,只是执行的时间不同。还是catch。 |