震惊Java异常处理中try与finally竟然存在这种关系
·
Java中try和finally
Java中try和finally
学过Java的家人们都知道finally在Exception中的作用是一定会执行的,但是大家有没有想过在Exception处理异常时,try和finally的运行顺序到底是什么样子的呢(特别是有return时)。
1.先执行完try在执行finally。
2.先执行try在执行的中途在执行finally。
结果到底是什么让我们用代码来说事。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println(check());
}
static int check(){
int num = 10;
try{
num = 10;
System.out.println(num);
return num;
}finally{
num = 100;
System.out.println(num);
}
}
}
当我们代码写成这样时,输出结果是这样的:
如果是try与finally的关系是第一种就不会出现100,因为在运行return运行就会结束,所以就只有第二种关系才对。
出现这种情况有部分同学就会问了博主博主“为什么最后一数是10而不是100,你不是说会在再行try并在return前执行finally吗,num=100,为什么输出的是10而不是100”。
这就和return运用有关了,在try中的return会另外在内存中开辟一个空间来储存num,而finally中return改变num的地方是栈而不是之前return储存的地方,return识别的num还是10,所以输出才是这种情况,当我把代码改为如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println(check());
}
static int check(){
int num = 10;
try{
num = 10;
return num;
}finally{
num = 100;
return num;
}
}
}

当代码这么写时输出就为100,说明博主上面说的是对的。
更多推荐

所有评论(0)