zoukankan      html  css  js  c++  java
  • JAVA8之Lambda表达式

    1.Lambda基本语法

    (parameters) -> expression      (表达式,隐藏了return)

    (parameters) -> {statements;}

    2.局部变量

      Lambda表达式运行使用自由变量(外层作用域中定义的变量)。Lambda可以捕获实例变量和静态变量,但局部变量必须显式声明为final。换句话说,Lambda表达式只能捕获指派给他们的局部变量一次(捕获实例变量可以被看作捕获最终局部变量this)。

      为什么局部变量有限制?因为实例变量存储在堆中,而局部变量存储在栈上。如果Lambda可以直接访问局部变量,而且Lambda是在一个线程中使用,则使用Lambda的线程,可能会在分配该变量的线程将这个变量收回之后,去访问该变量。因此,java在访问自由局部变量时,实际上是在访问它的副本,而不是访问原始变量。这样会引发线程的不安全性。

    3.方法引用

      方法引用就是根据已有的方法实现来创建Lambda表达式,目标引用放在分隔符::前,方法的名称放在后面。

    Lamba 方法引用
    (Apple a) -> a.getWeight() Apple :: getWeight
    () -> Thread.currentThread().dumpStack() Thread.currentThread() :: dumpStack
    (str,i) -> str.substring(i) String::substring
    (String s) -> System.out.println(s) System.out :: println

         方法引用主要有三类:

        (1)指向静态方法的方法引用,如Integer的parseInt方法

         (args) -> ClassName.staticMethod        ==          ClassName :: staticMethod

           (2)指向任意类型实例方法的方法引用,如String的length方法

        (arg0,rest) -> arg0.instanceMethod(rest)           ==           ClassName :: instanceMethod

      (3)  指向现有对象的实例方法的方法引用

        (args) -> expr.instanceMethod(args)           ==    expr :: instanceMethodb

  • 相关阅读:
    Office转SWF的一些感想(Office2007和Office2010)
    数据库字段为日期类型时
    C#实现office文档转换为PDF格式
    C#.net word excel powerpoint (ppt) 转换成 pdf 文件
    Servlet基础
    Android加速度传感器实现“摇一摇”,带手机振动
    android完全退出应用程序
    【安卓笔记】作为内部类的广播接收者
    Android中使用广播机制退出多个Activity
    [Android] ImageView.ScaleType设置图解
  • 原文地址:https://www.cnblogs.com/ryjJava/p/12293226.html
Copyright © 2011-2022 走看看