class(類)是Java中的頭等公民,所有的東西都是寫在class裡面class,當中包含了屬性以及方法:class People {
String name;
int age;
public void sleep(int hour) {
System.out.println("我今天睡了 " + hour + " 小時");
}
public String speak(String word) {
String info = name + "說了" + word;
return info;
}
public void eat() {
}
}
當定義了一個class時,Java會預先將它的整個模板存在Method Area(方法區),當後續實例化時會去使用這個模板實例化這個class。
如下圖所示

People:public class PeopleTest {
public static void main(String[] args) {
People jack = new People();
jack.name = "Jack";
jack.age = 21;
jack.eat(); // 沒有任何事發生
jack.sleep(10); // 我今天睡了 10 小時
jack.speak("helloooooo"); // Jack說了helloooooo
}
}
當在main當中實例化這個People時,會從Method Area(方法區),並依照在Day10-陣列(二)提到的那樣分別將不同的東西放在它們應該放的位置(Stack、Heap)。
如下圖所示

main,也是這個PeopleTest程式的進入點,它的裡面有兩個局部變量,分別是args(參數也是變量的一種)和jack(剛剛定義的People class),並且它們會一起被放在Stack中和main在一起(因為main還沒結束)。實例化了一個People,變數名為jack型別為People。程式碼的部分是People jack = new People();
jack的name和age屬性分別賦值。(String在記憶體中應該也是屬於引用型別,記憶的應該會是16進制位址,後續確定時會再進行修正)eat()方法,還記得之前提到過,Stack是屬於先進後出,所以當調用eat()方法後,執行完裡面的東西(依照剛剛所寫的來看,裡面沒有任何東西,所以它進去後就又馬上出來),實線的部分為它實際所在的位置,虛線及箭頭代表它從Stack中離開。sleep()和speak()方法。eat()那樣離開Stack。main裡面沒有東西要執行了,它也會從Stack離開。
最後它們都一起跑到掰掰區跟大家說掰掰了。