匿名对象

2018-10-14  本文已影响19人  UlissesJr

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
上一篇下一篇

猜你喜欢

热点阅读