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

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

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

    一个对象的内存图:

    三个对象的内存图:

     

  • 相关阅读:
    [算法整理]树上求LCA算法合集
    线段树专题测试2017.1.21
    [数据结构]替罪羊树简介
    图论测试 2017.1.17
    bzoj 2038 A-小Z的袜子[hose]
    洛谷比赛『期末考后的休闲比赛2』
    [题解]bzoj 1861 Book 书架
    bzoj 3223 文艺平衡树
    Splay简介
    python2.7 一个莫名其妙的错误
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/14985413.html
Copyright © 2011-2022 走看看