天天看點

Java 面試題 異常return

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 類名 > 儲存的檔案名

Java 面試題 異常return

這個就是執行的流程。

首先我先講講記憶體空間的分布。主要分為:JVM棧,堆,MataSpace(源空間)。JVM棧分成諾幹個棧幀,每一個棧幀對應着一個方法。源空間裡有方法區,方法區裡又有運作時常量池,運作時常量池中又有字元串常量池。

Java 面試題 異常return

首先執行main()方法,main()入棧,之後調用m1()方法,m1()方法進棧。

Java 面試題 異常return

執行m1(),而棧幀又是這樣一種結構。裡面有程式計數器,局部變量表,操作數棧。

Java 面試題 異常return

左端是位元組碼檔案。stack是指的操作數棧,隻需要兩個,locals指的是局部變量表。