简单概述:
-
-
没有名字的对象
-
-
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 = "黑色";对属性的每一次赋值,紧接着它就变成垃圾被回收,所以匿名对象对属性进行赋值时没有意义的。
最后一张图有具体步骤,上面是本人口述的(仅供参考)。
为了方便理解,以下是数组的内存图:
一个对象的内存图:
三个对象的内存图: