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 = "黑色";对属性的每一次赋值,紧接着它就变成垃圾被回收,所以匿名对象对属性进行赋值时没有意义的。

最后一张图有具体步骤,上面是本人口述的(仅供参考)。

为了方便理解,以下是数组的内存图:

一个对象的内存图:

三个对象的内存图:

 

原文地址:https://www.cnblogs.com/LEPENGYANG/p/14985413.html