当前位置: 首页 > news >正文

内部类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表达式:编译之后没有单独的字节码文件

相关文章:

内部类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 …...

设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1...n]和 Bfl...n]中,试编写算法建立该二叉树的二叉链表。

题目描述:设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1…n]和 B[1…n]中,试编写算法建立该二叉树的二叉链表。 分析: 对于一颗二叉树,知道其中序和先序序列就可以完全确定…...

什么是Daily Scrum?

Daily Scrum(每日站会),Scrum Master要确保这个会在每天都会开。这个会的目的就是检查正在做的东西和方式是否有利于完成Sprint目的,并及时做出必要的调整。 每日站会一般只开15分钟,为了让事情更简单些,这…...

逆波兰表达式求值[中等]

优质博文:IT-BLOG-CN 一、题目 给你一个字符串数组tokens,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运算对象)都…...

Oracle连接和使用

5. Oracle连接和使用 5.1. sqlplus sqlplus作为甲骨文公司提供的一款本族工具产品,有着悠久的历史和积淀,它几乎伴随着Oracle数据库产生至今的整个生命周期,而且,还会继续和Oracle数据库产品相伴一直发展下去。该工具看似简单灵活的背后,却为广大用户使用Oracle数据库提…...

redis单线程为什么这么快

redis单线程为什么这么快 redis是使用的单线程来进行操作的,因为所有的数据都是在内存中的,内存操作特别快。而且单线程避免了多线程切换性能损耗问题 单线程如何处理并发客户端连接? redis利用epoll来实现IO多路复用,将连接信息和…...

工业机器视觉megauging(向光有光)使用说明书(五,轻量级的visionpro)

这个说明主要介绍抓线功能。 第一步,添加线工具,鼠标双击工具箱“抓线”,出现如下界面: 第二步,我们拉一条,“九点标定”到“抓线1”的线,和visionpro操作一样: 第三步,…...

【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛

文章目录 【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛A.星期几考试?C.信件D、乘除法E、不知道叫什么名字F.我要学会盾反!G.闪闪发光心动不已!H.不想想背景的gcdI.uu爱玩飞行棋J.火柴人小游戏K .有趣的BOSS 【LittleXi】2023年广东…...

【C语言:数据在内存中的存储】

文章目录 1.整数在内存中的存储1.1整数在内存中的存储1.2整型提升 2.大小端字节序2.1什么是大小端2.2为什么有大小端之分 3.整数在内存中的存储相关题目题目一题目二题目三题目四题目五题目六题目七 4.浮点数在内存中的存储4.1浮点数存的过程4.2浮点数取得过程 在这之前呢&…...

每日一练:阿姆斯特朗数

如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。 例如 1^3 5^3 3^3 153。 1000 以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。...

fatal: remote error: upload-pack: not our ref (未解决问题)

PX4使用 git submodule update --init --recursive报错 fatal: remote error: upload-pack: not our ref解决办法参考:https://stackoverflow.com/questions/61163082/why-does-git-submodule-update-fail-with-fatal-remote-error-upload-pack-not-o 感觉就是清…...

Python 3 使用 read()、readline()、readlines() 函数 读取文件

1 样例文件 example.txt 春晓 孟浩然〔唐代〕 春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少。 2 分别使用 read()、readline()、readlines() 函数 2.1 # read() -------- 一次性读取所有文本,以字符串的形式返回结果。 # read() ----…...

勒索解密后oracle无法启动故障处理----惜分飞

客户linux平台被勒索病毒加密,其中有oracle数据库.客户联系黑客进行解密【勒索解密oracle失败】,但是数据库无法正常启动,dbv检查数据库文件报错 [oraclehisdb ~]$ dbv filesystem01.dbf DBVERIFY: Release 11.2.0.1.0 - Production on 星期一 11月 27 21:49:17 2023 Copyrig…...

Leetcode144. 二叉树的前序遍历-C语言

文章目录 题目介绍题目分析解题思路1.创建一个数组来储存二叉树节点的值2.根据二叉树的大小来开辟数组的大小3.边前序遍历边向创建的数组中存入二叉树节点的值 完整代码 题目介绍 题目分析 题目要求我们输出二叉树按前序遍历排列的每个节点的值。 解题思路 1.创建一个数组来…...

dmesg命令在软件测试中的实际应用

简介:当你想要了解 Linux 系统在启动时究竟发生了什么?或者当硬件设备不工作时,如何进行调试?这就是 dmesg 命令的用武之地。本文将介绍 dmesg 的基本功能,并深入探讨其在软件测试中的实际应用。 历史攻略&#xff1a…...

【渗透】记录阿里云CentOS一次ddos攻击

文章目录 发现防御 发现 防御 流量清洗 使用高防...

前端面试提问(3)

1、js两个数相加会不会丢精度? 可能会遇到精度丢失的问题。JavaScript 使用的是 IEEE 754 浮点数标准,即一种二进制表示法,有时不能准确地表示十进制小数。如果你需要进行精确的十进制数值计算,可以使用一些处理精确数值的库&…...

fl studio21.2最新汉化中文完整版网盘下载

fl studio 21中文版是Image-Line公司继20版本之后更新的水果音乐制作软件,很多用户不太理解,为什么新版本不叫fl studio 21或fl studio2024,非得直接跳到21.2版本,其实该版本是为了纪念该公司22周年,所以该版本也是推出…...

差分数组相关知识点以及刷题

差分数组 差分数组是什么? **举例:**对于数组考虑数组 a[1,3,3,5,8],对其中的相邻元素两两作差(右边减左边),得到数组 [2,0,2,3]。然后在开头补上 a[0],得到差分数组: ​ d[1,2,0…...

使用 DMA 在 FPGA 中的 HDL 和嵌入式 C 之间传输数据

使用 DMA 在 FPGA 中的 HDL 和嵌入式 C 之间传输数据 该项目介绍了如何在 PL 中的 HDL 与 FPGA 中的处理器上运行的嵌入式 C 之间传输数据的基本结构。 介绍 鉴于机器学习和人工智能等应用的 FPGA 设计中硬件加速的兴起,现在是剥开几层“云雾”并讨论 HDL 之间来回传…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...