Java 面试题 异常return
程序员文章站
2022-04-12 13:15:06
...
public static void main(String[] args) {
int result=m1();
System.out.println(result);
}
public static int m1(){
int a=10;
try{
a=20;
throw new RuntimeException();
}catch(Exception e){
a=30;
return a;
}finally {
a=40;
}
}
//答案
30
根据cmd 指令,打开字节码文件
javap -v 类名 > 保存的文件名
这个就是执行的流程。
首先我先讲讲内存空间的分布。主要分为:JVM栈,堆,MataSpace(源空间)。JVM栈分成诺干个栈帧,每一个栈帧对应着一个方法。源空间里有方法区,方法区里又有运行时常量池,运行时常量池中又有字符串常量池。
首先执行main()方法,main()入栈,之后调用m1()方法,m1()方法进栈。
执行m1(),而栈帧又是这样一种结构。里面有程序计数器,局部变量表,操作数栈。
左端是字节码文件。stack是指的操作数栈,只需要两个,locals指的是局部变量表。