對象的使用
對象的使用格式
建立對象:
類名 對象名 = new 類名();
使用對象通路類中的成員:
對象名.成員變量;
對象名.成員方法();
對象的使用格式舉例:
public static void main(String[] args) {
// 1. 導包。
// 我需要使用的Student類,和我自己Demo02Student位于同一個包下,是以省略導包語句不寫
// 2. 建立,格式:
// 類名稱 對象名 = new 類名稱();
// 根據Student類,建立了一個名為stu的對象
Student stu = new Student();
// 3. 使用其中的成員變量,格式:
// 對象名.成員變量名
System.out.println(stu.name); // null
System.out.println(stu.age); // 0
System.out.println("=============");
// 改變對象當中的成員變量數值内容
// 将右側的字元串,指派交給stu對象當中的name成員變量
stu.name = "趙麗穎";
stu.age = 18;
System.out.println(stu.name); // 趙麗穎
System.out.println(stu.age); // 18
System.out.println("=============");
// 4. 使用對象的成員方法,格式:
// 對象名.成員方法名()
stu.eat();
stu.sleep();
stu.study();
}
成員變量的預設值
資料類型 | 預設值 | |
---|---|---|
基本類型 | 整數(byte,short,int,long) | |
浮點數(float,double) | 0.0 | |
字元(char) | \u0000' | |
布爾(boolean) | false | |
引用類型 | 數組,類,接口 | null |
對象記憶體圖
一個對象,調用一個方法記憶體圖
通過上圖,我們可以了解,在棧記憶體中運作的方法,遵循"先進後出,後進先出"的原則。變量p指向堆記憶體中
的空間,尋找方法資訊,去執行該方法。
但是,這裡依然有問題存在。建立多個對象時,如果每個對象内部都儲存一份方法資訊,這就非常浪費記憶體
了,因為所有對象的方法資訊都是一樣的。那麼如何解決這個問題呢?請看如下圖解。
兩個對象,調用同一方法記憶體圖
對象調用方法時,根據對象中方法标記(位址值),去類中尋找方法資訊。這樣哪怕是多個對象,方法資訊
隻儲存一份,節約記憶體空間。
一個引用,作為參數傳遞到方法中記憶體圖
引用類型作為參數,傳遞的是位址值。
成員變量和局部變量差別
- 在類中的位置不同
- 成員變量:類中,方法外
- 局部變量:方法中或者方法聲明上(形式參數)
- 作用範圍不一樣
- 成員變量:類中
- 局部變量:方法中
- 初始化值的不同
- 成員變量:有預設值
- 局部變量:沒有預設值。必須先定義,指派,最後使用
- 在記憶體中的位置不同
- 成員變量:堆記憶體
- 局部變量:棧記憶體
- 生命周期不同
- 成員變量:随着對象的建立而存在,随着對象的消失而消失
- 局部變量:随着方法的調用而存在,随着方法的調用完畢而消失