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指的是局部變量表。