文章目录
1、无异常的情况
1.1、只有try有return的情况
public class TestTry {
public static int getValue1() {
try {
System.out.println("try……");
return 1;
} finally {
System.out.println("finally……");
}
}
public static void main(String[] args) {
int tt = getValue1();
System.out.println(tt);
}
}
首先执行try代码块,然后执行finally代码块,然后return 1;
1.2、只有try、catch有return的情况
public class TestTry {
public static int getValue1() {
try {
System.out.println("try……");
return 1;
} catch (Exception e) {
System.out.println("catch……");
return 2;
} finally {
System.out.println("finally……");
}
}
public static void main(String[] args) {
int tt = getValue1();
System.out.println(tt);
}
}
首先执行try代码块,然后执行finally代码块,然后return 1;(因为不抛出异常,不会进入catch代码块,运行过程和1.1示例并没有什么区别)
1.3、只有try、finally有return的情况
public class TestTry {
public static int getValue1() {
try {
System.out.println("try……");
return 1;
} catch (Exception e) {
System.out.println("catch……");
} finally {
System.out.println("finally……");
return 2;
}
}
public static void main(String[] args) {
int tt = getValue1();
System.out.println(tt);
}
}
首先执行try代码块,然后执行finally代码块,因为finally代码块中有return语句,此时try代码块的return语句无效
1.4、try、catch、finally都有return的情况
public class TestTry {
public static int getValue1() {
try {
System.out.println("try……");
return 1;
} catch (Exception e) {
System.out.println("catch……");
return 2;
} finally {
System.out.println("finally……");
return 3;
}
}
public static void main(String[] args) {
int tt = getValue1();
System.out.println(tt);
}
}
首先执行try代码块,然后执行finally代码块,因为finally代码块中有return语句,此时try代码块的return语句无效(因为不抛出异常,不会进入catch代码块,运行过程和1.3示例并没有什么区别)
2、有异常的情况
2.1、只有try、catch有return的情况
public class TestTry {
public static int getValue2() {
try {
System.out.println("try……");
int value = 0;
int result = 1 / value;//触发异常
return 1;
} catch (Exception e) {
System.out.println("catch……");
return 2;
} finally {
System.out.println("finally……");
}
}
public static void main(String[] args) {
int tt = getValue2();
System.out.println(tt);
}
}
首先执行try代码块,然后执行catch代码块,然后执行finally代码块,因为catch代码块中有return语句,此时try代码块的return语句无效
2.2、只有try、finally有return的情况
public class TestTry {
public static int getValue2() {
try {
System.out.println("try……");
int value = 0;
int result = 1 / value;//触发异常
return 1;
} catch (Exception e) {
System.out.println("catch……");
} finally {
System.out.println("finally……");
return 2;
}
}
public static void main(String[] args) {
int tt = getValue2();
System.out.println(tt);
}
}
首先执行try代码块,然后执行catch代码块,然后执行finally代码块,因为finally代码块中有return语句,此时try代码块的return语句无效
2.3、try、catch、finally都有return的情况
public class TestTry {
public static int getValue2() {
try {
System.out.println("try……");
int value = 0;
int result = 1 / value;//触发异常
return 1;
} catch (Exception e) {
System.out.println("catch……");
return 2;
} finally {
System.out.println("finally……");
return 3;
}
}
public static void main(String[] args) {
int tt = getValue2();
System.out.println(tt);
}
}
首先执行try代码块,然后执行catch代码块,然后执行finally代码块,因为finally代码块中有return语句,此时try代码块和catch代码块的return语句均无效
3、总结
1、无论是否有异常,如果有finally代码块,finally代码块一定会被执行,然后再执行返回语句。
2、有异常的情况,先执行catch代码块,再执行finally代码块,然后再执行返回语句。
3、如果有异常,catch代码块有return语句,finally代码块无return语句,则使用catch代码块的return语句。
4、如果finally代码块有return语句,无论是否有异常,均会使用finally代码块中的return语句。