栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Lambda表达式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Lambda表达式

文章目录
  • 一、内部类
    • 1.1成员内部类
      • 内部类三个特点
      • 内部类产生对象的两种方式
    • 1.2静态内部类
      • 与成语内部类最大的区别
      • 静态内部类能否定义自己的成员域
    • 1.3方法内部类
    • 1.4匿名内部类(方法内部类的一种)
  • 二、Lambda表达式
    • 2.1接口中引入default普通方法
    • 2.2函数式接口
    • 2.3Lambda表达式——匿名内部类(互相转换)
    • 2.4Lambda表达式的四种情况
      • 无返回值无参数
      • 无返回值有参数
      • 有返回值无参数
      • 有返回值有参数


一、内部类



1.1成员内部类

内部类三个特点

内部类产生对象的两种方式



私有内部类:inner类对于outter类外部完全隐藏,除了Outter类,外部完全无法使用Inner类(类似二叉树的节点类,因为节点类对外部没有意义也无法使用,只能二叉树这个类内部进行修改访问)

产生内部类对象要先产生外部类的对象,这个外部类对象会被自动传入内部类。

在成员内部类访问外部fun()方法,使用外部类对象调用,例如下图Outter.this.fun()


内部类一定可以访问外部类的静态域:
例如可以直接打印成员属性msg和静态属性age

1.2静态内部类 与成语内部类最大的区别

1.静态内部类是无法直接访问外部类的成员属性的,没有外部类的对象,没有对象就无法访问成员属性,例如下图不能直接打印外部类属性msg。但是如果内部类中产生外部类的对象,还是可以访问外部属性的,例如下图黄色框中代码所示

2.静态内部类可以直接访问外部类的静态属性

静态内部类能否定义自己的成员域

一定是可以的,例如上图中静态内部类的fun方法就是个普通方法。

静态内部类就是个普通的类,只不过嵌套在外部类中。

直接访问的意思是不产生外部类对象就能访问,但如果产生外部类对象还是可以访问的。

1.3方法内部类


解释以下第三点:

在这个内部类中是无法修改外部方法中的属性或者变量的,因为出了方法内部类这个类之后,这个类就不存在了,现在在里面修改属性之后对于外部是不可见得。

方法内部类一律不存在静态变量

1.4匿名内部类(方法内部类的一种)

大多数情况用在实参
比如:之前最大堆实现的接口就包含匿名内部类

二、Lambda表达式

Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expression)可以看作是一个匿名函数,基于数学中的λ演算得名,也可称为闭包(Closure) 。

2.1接口中引入default普通方法

2.2函数式接口

注意事项:

  1. 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
  2. 如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。
@FunctionalInterface 
interface NoParameterNoReturn { 
void test(); 
default void test2() { 
System.out.println("JDK1.8新特性,default默认方法可以有具体的实现"); 
}
 }

2.3Lambda表达式——匿名内部类(互相转换)

使用Lambda表达式的前提:接口必须是函数接口,接口中只有一个抽象方法

2.4Lambda表达式的四种情况 无返回值无参数
public class TestDemo { 
public static void main(String[] args) {
 NoParameterNoReturn noParameterNoReturn = ()->{ 
 System.out.println("无参数无返回值"); };
 noParameterNoReturn.test();


无返回值有参数
MoreParameterNoReturn moreParameterNoReturn = (int a,int b)->{ 
System.out.println("无返回值多个参数:"+a+" "+b); };
moreParameterNoReturn.test(20,30)



此时的a是匿名内部类自己的参数,所以可以修改x的值,如果是外部属性,例如下图中的num就只能读取,不能修改

有返回值无参数
 OneParameterNoReturn oneParameterNoReturn = (int a)->{
  System.out.println("无参数一个返回值:"+ a); 
  };
  oneParameterNoReturn.test(10);


有返回值有参数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014859.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号