簡單概述:
-
-
沒有名字的對象
-
-
B:匿名對象應用場景
-
a:調用方法,僅僅只調用一次的時候。
-
那么,這種匿名調用有什么好處嗎?
-
節省代碼
-
-
注意:調用多次的時候,不適合。匿名對象調用完畢就是垃圾。可以被垃圾回收器回收。
-
-
首先要知道棧和堆的區別:
棧:存儲局部變量
堆:存儲new出來的數組或對象
作業目的:使用匿名函數生成10次相同的對象
源碼:
public class Demo01_Student {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
method(new Car()); //使用匿名對象可以像流水線一樣作業,生成同樣的內容
}
}
/**
* 匿名對象可以作為參數結合循環生成同樣的內容
* @param car
*/
public static void method(Car car){
car.num = 4;
car.color = "白色";
System.out.println(car.num+"..."+car.color);
}
}
使用匿名函數給對象屬性賦值:
匿名函數的內存圖:
簡單解釋下流程:棧區里面有一個main方法,里面存着Car car對象,堆里面存new出來的對象,並且里面的屬性一開始是默認值,然后會生成一個地址值,假如ox0011,並將地址值賦值給car對象,通過地址值找到堆中的對象,將如圖中的 car.color = "白色",car.num = 4 賦值給了對象,隨后執行代碼 car.run 方法,方法進棧,執行后出棧。再往下使用匿名函數給對象賦值,還會在堆中開辟空間,color還是默認值,並生成地址值,因為是匿名函數,沒有找到有名字的對象。緊接着執行代碼 new Car().color = "黑色";對屬性的每一次賦值,緊接着它就變成垃圾被回收,所以匿名對象對屬性進行賦值時沒有意義的。
最后一張圖有具體步驟,上面是本人口述的(僅供參考)。
為了方便理解,以下是數組的內存圖:
一個對象的內存圖:
三個對象的內存圖: