JAVA中的回调函数

news2024/11/26 8:51:45

回调函数的基本概念:

回调函数是一种常见的编程模式,也称为回调机制。回调函数是一种特殊的函数,它允许将一段代码作为参数传递给另一个方法,并在需要时调用。回调函数通常用于异步编程或事件处理,可以将程序的控制权转移到回调函数上,以便在特定事件发生时执行相关的操作。

基本概念:
1. 回调:指被传入到另一个函数的函数。
2. 异步编程:指在代码执行时不会阻塞程序运行的方式。
3. 事件驱动:指程序的执行是由外部事件触发而不是顺序执行的方式。

在这里插入图片描述

回调函数的作用和使用场景

回调函数是一种常见的编程技术,它可以在异步操作完成后调用一个预定义的函数来处理结果。回调函数通常用于处理事件、执行异步操作或响应用户输入等场景。

回调函数的作用是将代码逻辑分离出来,使得代码更加模块化和可维护。使用回调函数可以避免阻塞程序的运行,提高程序的性能和效率。另外,回调函数还可以实现代码的复用,因为它们可以被多个地方调用。

回调函数的使用场景包括:

事件处理:回调函数可以用于处理各种事件,例如鼠标点击、键盘输入、网络请求等。

异步操作:回调函数可以用于异步操作,例如读取文件、发送邮件、下载文件等。

数据处理:回调函数可以用于处理数据,例如对数组进行排序、过滤、映射等。

插件开发:回调函数可以用于开发插件,例如 WordPress 插件、jQuery 插件等。

回调函数是一种非常灵活和强大的编程技术,可以让我们更好地处理各种异步操作和事件。

JAVA中的回调函数

在Java中,回调函数通常通过接口来实现。具体步骤如下:

1. 定义一个接口,其中声明回调方法。这个方法的参数和返回类型取决于你的需求。

2. 编写包含回调函数的方法,并将接口作为参数传递进去。这样,该方法就知道在需要时调用哪个回调方法。

3. 创建实现接口的类,并实现回调方法。

4. 在主程序中,实例化回调接口的实现类,并将其作为参数传递给包含回调函数的方法。

5. 第三步和第四步通常使用匿名内部类和匿名对象或者匿名函数/lambda表达式

在 Java 中,回调函数通常通过接口(interface)的方式实现。

一个接口可以定义一个或多个回调函数,这些回调函数由实现接口的类来实现。

当某个事件触发时,调用方可以通过接口中的方法调用回调函数,从而实现相应的处理逻辑。

匿名函数/lambda表达式

内部类:
将一个类的定义写在另一个类的内部,形成了类之间的嵌套定义内部类分为两种:

  1. 成员内部类【了解】 2.局部内部类【重点】
  • 内部类本质上也是一个类,只是定义在一个外部类的里面
  • 匿名内部类属于局部内部类的一种变形【特殊情况】
  • 和局部变量一样,局部内部类定义时不能加访问权限修饰
  • 局部内部类只能被定义的当前方法使用
  • 在局部内部类的方法中可以访问外部的属性或者定义的当前方法的局部变量
    如果内部类的属性和外部类发生冲突,按照就近原则优先访问内部类的,如果非要访问外部类的属性需要在属性名前面加上外部类名.this.属性名

注意:在内部类的方法中可以访问当前定义所在的方法中的局部变量,但是不允许修改

int[] array = new int[5];
class MyComparator implements Comparator{
	@Override
	public int compare(Integer i, Integer j){
		return i - j;
	}
}
Arrays.sort(array, new MyComparator());

匿名内部类:

  1. 在内部类中都是先定义实现类再写创建类的对象,与内部类不同的是匿名内部类无需定义实现类
  2. 总所周知,接口和抽象类无法创建对象,通过new 接口名(){@Override}的方式并不是通过接口创建对象,而是创建的是该接口的实现类对象,只不过该实现类的名称没有被显式定义
  3. 通过new 接口名(){@Override}的方式创建一个匿名的实现类;匿名内部类不在乎实现类的名字,它只在乎该对象是否为对应接口类型的对象
  4. new 接口名(){@Override}的方式本质上创建的是该接口的实现类对象,类的定义这一块由编译器完成了
匿名内部类语法:
new 接口名(){
	//对接口中方法的实现
}
==============================================================================================================
int[] array = new int[5];
Comparator comparator = new Comparator(){ //这句话里面既包含了一个没有名字的类的定义,又包含了对这个接口的实现类对象的创建,new Comparator()这个就叫做匿名内部类。
	@Override
	public int compare(Integer i, Integer j){
		return i - j;
	}
}
Arrays.sort(array, comparator );

匿名函数/lambda表达式

int[] array = new int[5];
Arrays.sort(array, new Comparator<Integer>(){ //这句话里面既包含了一个没有名字的类的定义,又包含了对这个接口的实现类对象的创建
	@Override
	public int compare(Integer i, Integer j){
		return i - j;
	}
}
lambda表达式
int[] array = new int[5];
Arrays.sort(array, () => {
	@Override
	public int compare(Integer i, Integer j){
		return i - j;
	}
}

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

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

相关文章

NFC物联网智能购物车设计方案

智能购物车是综合利用计算机网络、射频识别技术、数据库技术、单片机于一体的设备具有先进性、便于管理性、经济性、普适性。基于NFC (Near Field Communication&#xff0c;近场通信)技术的智能购物车&#xff0c;能够大幅缩短结账排队时间&#xff0c;实现“无感支付”。NFC是…

对SPI总线上挂接多个X5045的读写操作

#include<reg51.h> //包含单片机寄存器的头文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit SCKP3^4; //将SCK位定义为P3.4引脚 sbit SIP3^5; //将SI位定义为P3.5引脚 sbit SOP3^6; //将SO位定义为P3.6引脚 sbit CS1P3^7; …

【js控制页面的模糊程度】【lenis禁止页面滚动】

文章目录 前言一、效果图二、使用步骤1.下载studio-freight/lenis2.使用studio-freight/lenis 三、下载 gsap在编写页面动画1. 下载gsap2.引入gsap3.调用gsap的方法&#xff0c;让页面模糊 总结 前言 在项目中&#xff0c;我们经常会遇到弹窗功能&#xff0c;当弹框弹出时&…

MPI并行程序设计 —— C 和 fortran 环境搭建 openmpi 示例程序

1.安装环境 wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.g tar zxf openmpi-4.1.6.tar.gz cd openmpi-4.1.6/ 其中 configure 选项 --prefix/.../ 需要使用绝对路径&#xff0c;例如&#xff1a; ./configure --prefix/home/hipper/ex_open…

python subprocess run 和 Popen 的一些使用和注意事项

文章目录 一、run二、Popen NAME subprocess - Subprocesses with accessible I/O streams MODULE REFERENCE https://docs.python.org/3.9/library/subprocess The following documentation is automatically generated from the Python source files. It may be incomplete, …

【事故总结】Mybatis-Wrapper导致的生产事故

近期遭遇了一次生产环境的严重告警&#xff0c;涉及慢接口和CPU过载。经过排查&#xff0c;发现问题根源在于一段使用MyBatis的查询代码。当传入空列表作为查询条件时&#xff0c;MyBatis会忽略该条件&#xff0c;导致全表扫描&#xff0c;进而引发系统资源耗尽和频繁的Full GC…

浅谈技术架构的演进过程

前言 最近在学习Redis、Doctor相关技术知识&#xff0c;它们与分布式系统有着很大的关系。 而对于分布式系统&#xff0c;它本身就是随着业务的不断推进&#xff0c;技术架构不断演进而得到发展和实现的。而所谓的分布式系统&#xff0c;实际上就是想办法引入更多的硬件资源&am…

OpenHarmony之分布式软总线

分布式软总线是多设备终端的统一基座&#xff0c;为设备间的无缝互联提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地传输任务和数据。 分布式软总线实现近场设备间统一的分布式通信管理能力&#xff0c;提供不区分链路的设备间发现连接、组网…

消息队列基础知识

学一点&#xff0c;整一点&#xff0c;基本都是综合别人的&#xff0c;弄成我能理解的内容 https://blog.csdn.net/BenJamin_Blue/article/details/125946812 https://blog.csdn.net/qq_46119575/article/details/129794304 &#x1f4cc;导航小助手&#x1f4cc; 生产者-消费者…

14.12-常见的对于非阻塞复制的误解

常见的对于非阻塞复制的误解 1&#xff0c;非阻塞赋值和$display1.1&#xff0c;RTL案例1.2&#xff0c;功能实现1.3&#xff0c;解释误解 2&#xff0c;#0延时赋值2.1&#xff0c;RTL案例2.2&#xff0c;功能实现2.3&#xff0c;解释误解 3&#xff0c;对同一变量进行多次非阻…

家用洗地机哪个牌子好?2024年洗地机热门品牌测评

随着科技水平的不断发展&#xff0c;人们对家居设备的要求也在不断提高&#xff0c;追求省时省力的家务工具变得越来越受欢迎。家用洗地机的出现满足了这一需求&#xff0c;其洗拖吸一体的特点使其成为现代家庭的必备神器。 使用家用洗地机可以极大地提高地面清洁的效率&#…

因数据侵权,纽约时报起诉OpenAI、微软

12月28日&#xff0c;金融时报消息&#xff0c;因为非法使用数百万篇新闻数据训练ChatGPT等生成式AI产品&#xff0c;《纽约时报》正在起诉OpenAI和微软。 这是第一家起诉生成式AI厂商的著名媒体。《纽约时报》没有公布具体数额&#xff0c;但希望获得数十亿美元的赔偿金。 O…

两向量叉乘值为对应平行四边形面积--公式推导

两向量叉乘值为对应平行四边形面积--公式推导 介绍 介绍

PowerShell Instal 一键部署gitea

gitea 前言 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来…

Ubuntu22.04-安装后Terminal无法调出

参考&#xff1a; Ubuntu20.04 终端打开不了的问题排查_ubuntu终端打不开-CSDN博客 https://blog.csdn.net/u010092716/article/details/130968032 Ubuntu修改locale从而修改语言环境_ubuntu locale-CSDN博客 https://blog.csdn.net/aa1209551258/article/details/81745394 问…

2023年度总结:技术旅程的杨帆远航⛵

文章目录 职业规划与心灵成长 ❤️‍&#x1f525;我的最大收获与成长 &#x1f4aa;新年Flag &#x1f6a9;我的技术发展规划 ⌛对技术行业的深度思考 &#x1f914;祝愿 &#x1f307; 2023 年对我来说是一个充实而令人难以忘怀的一年。这一年&#xff0c;我在CSDN上发表了 1…

有效解决vcruntime140_1.dll丢失的问题,关于vcruntime140_1.dll文件

今天在使用电脑的过程中突然提示找不到vcruntime140_1.dll&#xff0c;出现这样的提示后&#xff0c;想要在打开程序时&#xff0c;有再一次提示找不到vcruntime140_1.dll&#xff0c;不能在正常打开程序&#xff0c;那么有什么办法可以解决vcruntime140_1.dll丢失的问题呢&…

用python画最简单的图案,用python画小猫简单代码

本篇文章给大家谈谈用python画小猫简单100行代码&#xff0c;以及用python画最简单的图案&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 Source code download: 本文相关源码 from turtle import * #两个函数用于画心 defcurvemove():for i in range(200): …

Java基础02-Java编程基础

文章目录 变量&#xff08;Variables&#xff09;局部变量和成员变量局部变量&#xff08;Local Variables&#xff09;成员变量&#xff08;Instance Variables&#xff09; 标识符&#xff08;Identifiers&#xff09;八种基本数据类型原始数据类型&#xff08;Primitive Dat…

【网络安全 | CTF】pure_color

该题考察图片隐写 给出一张图片如下&#xff1a; 典型的图片隐写&#xff0c;运行stegsolve即可&#xff1a; 如图&#xff1a; flag{true_steganographers_doesnt_need_any_tools}