Java的匿名函數


簡單概述:

  • A:什么是匿名對象

    • 沒有名字的對象

  • B:匿名對象應用場景

    • a:調用方法,僅僅只調用一次的時候。

      • 那么,這種匿名調用有什么好處嗎?

        • 節省代碼

      • 注意:調用多次的時候,不適合。匿名對象調用完畢就是垃圾。可以被垃圾回收器回收。

    • b:匿名對象可以作為實際參數傳遞

首先要知道棧和堆的區別:

棧:存儲局部變量

堆:存儲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 = "黑色";對屬性的每一次賦值,緊接着它就變成垃圾被回收,所以匿名對象對屬性進行賦值時沒有意義的。

最后一張圖有具體步驟,上面是本人口述的(僅供參考)。

 

為了方便理解,以下是數組的內存圖:

 

 

一個對象的內存圖:

 

 

三個對象的內存圖:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM