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
離開。最後它們都一起跑到掰掰區跟大家說掰掰了。