每個method都有一個自己的stack
Instance Variable 會存在heap中
Local Variable 會存在stack中
public class Demo {
public static void main(String[] args) {
int data = 10;
Calculator calc = new Calculator();
int result = calc.add(2, 9);
System.out.println(result);
Calculator calc2 = new Calculator();
calc2.add(3, 7);
}
}
class Calculator {
int num = 20;
public int add(int n1, int n2) {
System.out.println(num);
return n1 + n2;
}
}
有兩個class,Demo和Calculator
Demo有:
4個 local variable -> data、calc、result、calc2
1個main method
Calculator有:
1個instance variable -> num
1個add method
每個method在JVM中都擁有自己的stack memory
而stack中存的是local variable
add method的 stack中的n1和n2的值,2跟9是從上方程式片段第6行的參數值帶入做範例。
因此main stack中的result變數的值才會是2+9=11
當第6行的add method執行完並返回結果給result之後,add stack就會被釋放。當下一次被呼叫add method時才會再建立一個對應物件的add method stack。
calc和calc2是由Calculator class 建(new)出來,指向Calculator物件的reference variable,同時也是main method中的local variable,所以存在main stack中
被建出來的物件會被存在Heap memory中,並被分發一個地址(例如123, 129隨便)
而後,該地址就會被存到calc和calc2的值的欄位做記錄,訴說著: 當你有事要找calc的時候,請去地址123敲門。然後你可能就帶入12跟23等兩個參數給calc的add method,此時就會建立一個add stack並將12作為n1、23作為n2帶入做計算使用