美文网首页
匿名对象

匿名对象

作者: UlissesJr | 来源:发表于2018-10-14 14:00 被阅读19次

    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
    

    相关文章

      网友评论

          本文标题:匿名对象

          本文链接:https://www.haomeiwen.com/subject/kgezaftx.html