内部类Lambda

静态内部类

/*** 静态成员是在类加载成字节码时就已经存在的,静态只能访问静态*/
public class Demo {public static void main(String[] args) {Outer.Inner.show();}
}class Outer {int num1 = 10;static int num2 = 20;static class Inner {static void show() {Outer outer = new Outer();System.out.println(outer.num1);System.out.println("show...");System.out.println(num2);}}
}

局部内部类

/*** 放在方法/代码块/构造器等执行体中* 方法体内的类必须在方法被执行的情况下才能被创建*/
public class LocalInnerClass {public static void main(String[] args) {A a = new A();a.show();}
}class A {void show() {class B {void show() {System.out.println("show--inner");}}B b = new B();b.show();}
}

匿名内部类

/*** 匿名内部类:* overview: 匿名内部类本质上是一个特殊的局部内部类(定义在方法内部)* prerequisite:需要存在一个接口或类* syntax: new className\interfaceName(){}*          new className(){}:代表继承这个类*          new interfaceName(){}:代表实现这个接口*/
public class AnonymousInnerClass {public static void main(String[] args) {//方法的形参是接口类型应该传入接口的实现类对象useInter(new InterImpl());useInter(new Inter() {@Overridepublic void show() {System.out.println("实现了这个类");}});}/*** new Inter() {**             @Override*             public void show() {*                 System.out.println("实现了这个类");*             }*         }* 这一些在定义实现类的同时实例化了实现类:匿名内部类可以作为方法的实际参数进行传输* //但是实现类必须要重写接口中所有抽象方法,如果抽象方法多,会变得可读性差,不好维护*/static void useInter(Inter i) {//Inter i =new InterImpl();//多态特性//静态方法调用会成一个变量等待给它数据 Interface i=i.show();//编译会检查Inter中有没有show()方法(多态)}
}interface Inter {void show();//接口抽象方法
}class InterImpl implements Inter {@Overridepublic void show() {System.out.println("implements...show...");}
}

Lambda表达式简化匿名内部类

public class lambdaDemo1 {/** Lambda表达式:JDK8开始的一种新的语法形式** 作用:简化匿名内部类的代码写法* 格式: () -> {}* ():匿名内部类被重写方法的形参列表* {}:被重写方法的方法体代码* ->是语法形式,无实际含义* */public static void main(String[] args) {useInter(()->{System.out.println("Lambda表达式重写的抽象方法");});}static void useInter(Inter i) {i.show();}
}interface Inter {void show();
}

反例:

public class LambdaDemo2 {public static void main(String[] args) {useInter(()-{});//编译错误//Lambda表达式只允许操作函数式编程接口:有且仅有一个抽象方法的接口}static void useInter(Inter1 i) {i.show1();}
}interface Inter1 {void show1();void show2();
}

注解@FunctionalInterface可以帮我们判断是不是函数式接口

image-20231202210814617

image-20231202210828252

Lambda省略规则

  • 参数类型可以省略不写
  • 如果只有一个参数,()也可以省略不写
  • 如果Lambda表达式的方法体代码只有一行代码

​ 可以省略大括号不写,同时必须省略分号

​ 此时如果这行代码是return语句,还必须省略return

public class LambdaDemo2 {public static void main(String[] args) {useCal(new Calculator() {@Overridepublic int calc(int a, int b) {return a+b;}});System.out.println("----------------");useCal((int a,int b)->{return a-b;});System.out.println("省略写法");useCal((a,b)-> a+b);}static void useCal(Calculator c) {int calc = c.calc(10, 20);System.out.println(calc);}
}interface Calculator {int calc(int a, int b);
}

Lambda表达式和匿名内部类的区别

使用限制不同

  • 匿名内部类:可以操作类,接口
  • Lambda表达式:只能操作函数式接口

实现原理不同

  • 匿名内部类:编译之后,产生一个单独的.class字节码文件
  • Lambda表达式:编译之后没有单独的字节码文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes实战(六)-多系统架构容器镜像构建实战

1 背景 最近在一个国产化项目中遇到了这样一个场景,在同一个 Kubernetes 集群中的节点是混合架构的,即其中某些节点的 CPU 架构是 x86 的,而另一些节点是 ARM 的。为了让镜像在这样的环境下运行,一种最简单的做法是根据节点类型为…

6-15 复制字符串

#include<stdio.h> #include<string.h> int main(){int i;char s1[80],s2[80];printf("输入的s2是&#xff1a;");scanf("%s",s2);for(i0;i<strlen(s2);i)s1[i]s2[i];printf("复制后的s1是&#xff1a;%s\n",s1); return 0;}

HttpRunner自动化工具之实现参数化传递

参数化实现及重复执行 参数化测试&#xff1a;在接口测试中&#xff0c;为了实现不同组数据对同一个功能模块进行测试&#xff0c;需要准备多组测试数据对模块进行测试的过程。 在httprunner中可以通过如下方式实现参数化&#xff1a; 1、在YAML/JSON 中直接指定参数列表 2、…

【STM32】STM32学习笔记-STM32简介(02)

00. 目录 文章目录 00. 目录01. STM32简介1.1 STM32是什么1.2 STM32应用领域1.3 STM32命名规则1.4 STM32选型 02. ARM简介2.1 ARM是什么2.2 ARM系列 03. STM32开发板3.1 MCU简介3.2 STM32开发板3.3 STM32硬件资源 04. STM32系统架构05. STM32引脚定义06. STM32启动配置07. STM3…

构建第一个ArkTS应用(纯HarmonyOS应用)

1. 安装开发工具 在华为开发者官方上下载HarmonyOS应用专用的开发工具&#xff0c;链接地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 要想使用开发工具让项目跑起来&#xff0c;需要10G的磁盘空间。开发工具需要的磁盘空间为2.36G&#xff1b;SDK需…

深度学习记录--logistic回归函数的计算图

计算图用于logistic回归函数 先回顾一下单一样本的logistic回归损失函数的公式&#xff0c;公式如下&#xff1a; 将logistic函数用计算图表示出来(以两个基础量为例)&#xff0c;计算图如下&#xff1a; 前向传播已经完成&#xff0c;接下来完成后向传播 运用链式法则依次求…

The Big IAM Challenge 云安全 CTF 挑战赛

The Big IAM Challenge 云安全 CTF 挑战赛 今天&#xff0c;我们来做一下有关于云安全 的CTF 挑战赛 The Big IAM Challenge,旨在让白帽子识别和利用 IAM错误配置&#xff0c;并从现实场景中学习&#xff0c;从而更好的认识和了解IAM相关的风险。比赛包括6个场景&#xff0c;每…

LeetCode 232.用栈实现队列

题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回…

智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC

@[toc] 智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者…

别再争国漫一哥了,真正的王者回来了!

相信很多漫迷都知道&#xff0c;《斗罗大陆》动画在播出的五年期间一直稳稳占领国漫各榜单第一的位置。现在它已经完结了大半年&#xff0c;尽管《斗破苍穹》《完美世界》等动画都在争国漫一哥&#xff0c;但排名总是上下浮动&#xff0c;没有定论。 但就在今天&#xff0c;《斗…

一款充电桩解决方案设计

一、基本的概述 项目由IP6536提供两路5V 1.5A 的USB充电口&#xff0c;IP6505提供一路最大24W的USB快充口支持QC3.0 / DCP / QC2.0 / MTK PE1.1 / PE2.0 / FCP / SCP / AFC / SFCP的快充协议&#xff0c;电池充电由type-C输入经过IP2326输出最高15W快充对电池进行充电&#xf…

C++:异常

文章目录 传统的处理错误的方式C异常C异常的使用抛异常的举例异常的重新抛出异常规范 自定义异常体系C标准库中的异常体系异常的优缺点 本篇总结的是C中关于异常的内容 传统的处理错误的方式 在C语言中&#xff0c;对于传统的错误方式有 终止程序&#xff1a;例如assert&…

【STL】手撕 string类

目录 1&#xff0c;string类框架 2&#xff0c;string&#xff08;构造&#xff09; 3&#xff0c;~string&#xff08;析构&#xff09; 4&#xff0c;swap&#xff08;交换&#xff09; 5&#xff0c;string&#xff08;拷贝构造&#xff09; 1&#xff0c;常规法 2&a…

Cmkae外部依赖管理

文章目录 一、cmake依赖管理介绍二、源码依管理1. FetchContent与find_package进行集成 2. CPM3. git submodule附加&#xff1a; address_sanitizer 和 undefined sanitizer 一、cmake依赖管理介绍 CMake 是跨平台的构建系统&#xff0c;支持 C/C、Objective-C、Fortran 等多种…

Git Bash环境下用perl脚本获取uuid值

在Linux环境下&#xff0c;比如在ubuntu就直接有uuidgen命令直接获取uuid值。在Windows环境下常用的git bash中没有对应的命令&#xff0c;略有不便。这里用脚本写一个uuidgen&#xff0c;模拟Linux环境下的uuidgen命令。 #! /usr/bin/perl use v5.14; use Win32;sub uuidGen {…

6-13连接两个字符串

#include<stdio.h> int main(){int i0,j0;char s1[222],s2[333];printf("请输入第一个字符串&#xff1a;\n");gets(s1);//scanf("%s",s1);printf("请输入第二个字符串&#xff1a;\n");gets(s2);while(s1[i]!\0)i;while(s2[j]!\0)s1[i]s2…

1.1卷积的作用

上图解释了1∗1卷积如何适用于尺寸为H∗W∗D的输入层&#xff0c;滤波器大小为1∗1∗D&#xff0c;输出通道的尺寸为H∗W∗1。如果应用n个这样的滤波器&#xff0c;然后组合在一起&#xff0c;得到的输出层大小为H∗W∗n。 1.1∗1卷积的作用 调节通道数 由于 11 卷积并不会改…

App测试之App日志收集及adb常用命令

文章目录 前言一、adb是什么1.APP测试收集手机日志常用的工具2.adb下载与安装3.ADT/SDK/ADB是什么4.adb连接真机 二、adb常用命令三、android系统日志文件1.logcat日志文件2.logcat日志文件分析 四、分析crash & ANR 日志1.发生crash如何分析2.发生ANR如何分析 总结扩展&am…

前端组件库开发

通常我们会使用很多组件库&#xff0c;有时候我们会去看源码比如element&#xff0c;antd&#xff0c;然后发现多少是按需导出&#xff0c;和vue.use全局注册&#xff0c;依赖于框架的拓展。 组件库的开发依赖框架的版本和node的版本&#xff0c;这个是需要说明的&#xff0c;然…

【阅读论文】时间序列异常检测:综合评价

文章目录 摘要1 异常检测范围2 时间序列和异常3 异常检测技术3.1预测方法3.2重建方法3.3编码方法3.4距离方法3.5分布方法3.6隔离树方法 4 实验评估4.1环境和设置4.2结果质量4.3运行时和内存 5 讨论致谢参考文献 摘要 在金融应用中&#xff0c;检测时间序列数据中的异常子序列是…