关于try。。。catch。。。finally问题
执行顺序:
首先会执行try中内容
- 当try中内容不会触发运行时报错时,仅仅会在执行到return语句前跳转到finally语句,如果finally语句里面有return语句,那么try语句里面剩余的return语句将不会被执行,如果finally里面没有return语句,那么将会返回try语句体里面继续执行return语句。
- 当try语句体报错,立即跳转到catch语句体(前提是catch到对应的exception),当执行到catch语句体的return语句之前(如果有return的话,没有return就执行到catch的最后一句)会跳转到finally语句,如果finally语句里面有return语句,那么catch语句里面剩余的return语句将不会被执行,如果finally里面没有return语句,那么将会返回catch语句体里面继续执行return语句.
总而言之,无论如何,finally语句必然执行完毕,而try、catch语句不一定会执行或者执行完毕。
例子一:
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
try {
int temp = 1;
return 1;
}catch (Exception e){
System.out.println(1.5);
return 2;
}finally {
System.out.println(4);
//return 3;
}
}
输出:
4
1
例子二:
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
try {
int temp = 1/0;
return 1;
}catch (Exception e){
System.out.println(1.5);
return 2;
}finally {
System.out.println(4);
//return 3;
}
}
输出:
1.5
4
2
例子三:
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
try {
int temp = 1;
return 1;
}catch (Exception e){
System.out.println(1.5);
return 2;
}finally {
System.out.println(4);
return 3;
}
}
输出:
4
3
例子四:
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
try {
int temp = 1/0;
return 1;
}catch (Exception e){
System.out.println(1.5);
return 2;
}finally {
System.out.println(4);
return 3;
}
}
输出:
1.5
4
3