A:什么是匿名对象
没有名字的对象
B:匿名对象的应用场景
- 调用方法 仅仅只调用一次的时候
这种方法的好处是可以节省代码
注意:多次调用的时候不适合。匿名对象调用完毕就是垃圾,可以被垃圾回收期回收。 - 匿名对象可以作为试剂参数传递
C:应用场景演示
public class Demo2_Car {
public static void main(String[] args){
Car c1 = new Car(); //创建有名字的对象
c1.run();
c1.run();
new Car().run(); //匿名对象调用方法 每次调用都必须new.
new Car().run(); //匿名对象是适合对方法的一次调用,因为调用多次就会产生多个对象,不如用有名字的对象。
//问题:匿名对象是否可以调用属性并赋值?有什么意义?
new Car().color = "red";
new Car().num = 8;
new Car().run();
}
}
class Car{
String color;
int num;
public void run(){
System.out.println(color + "..." + num);
}
}
输出结果:
null...0
null...0
null...0
null...0
null...0
其在内存中的形式如下图所示:
因为new Car().color =“red” 之后,内存地址没有被调用,所有直接被垃圾回收机制清除。
结论:匿名对象可以调用属性,但是没有意义。如果需要赋值,还是用有名字的对象。
- 匿名对象可以当做参数传递的示例
public class Demo2_Car {
public static void main(String[] args) {
//如果要创建相同的十辆车的对象,则代码很繁琐,复用性差。
Car c1 = new Car();
c1.color = "red";
c1.num = 8;
c1.run();
Car c2 = new Car();
c2.color = "red";
c2.num = 8;
c2.run();
//有名字对象传参
Car c3 = new Car();
method(c3);
//匿名对象传参
method(new Car());
//这一步相当于把new Car()的地址值赋值给了cc。相当于Car cc = new Car();
}
//解决办法:抽取方法,提高代码的复用性。
public static void method(Car cc){
cc.color = "red";
cc.num = 8;
cc.run();
}
}
class Car {
String color;
int num;
public void run() {
System.out.println(color + "..." + num);
}
}
结果如下:
red...8
red...8
red...8
red...8
网友评论