在C或者C++中回调函数的定义:
程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数)
Java中没有指针,不能传递方法的地址,一般采用接口回调实现:把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。
实现回调的原理简介如下:
首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象。控制器对象负责检查某个场景是否出现或某个条件是否满足。当此场景出现或此条件满足时,自动调用回调对象的方法。
可以举个现实生活中的例子:
一读者想借《软件技术学习与实践》这本书,但这本书已被其他读者借走了。于是,读者与图书馆管理员间发生了以下对话:
读者:“我把我的电话号码告诉你,等书一到就马上通知我。”
管理员:“好的。另一读者把书还回来后,马上给您打电话,书我先帮您留着。”
在上述这个场景中,读者就是“回调对象”,管理员就是“控制器对象”,读者的电话号码就是“回调对象的方法”。
详细的实例如下:
1、创建一个回调接口:
1 //回调接口
2 public interface ICallBack
3 {
4 void run();
5 }
2、创建回调接口的实现类:
1 class CallBackClass implements ICallBack
2 {public void run()
3 {
4 //输出当前时间
5 System.out.println(System.currentTimeMillis() );
6 }
7 }
3、创建控制类
1 class Controller
2 {
3 public ICallBack CallBackObject = null;// 引用回调对象
4 Scanner input = new Scanner(System.in); //读取命令行输入
5 public Controller(ICallBack obj)
6 {
7 this.CallBackObject = obj;
8 }
9 public void Begin()
10 {
11 while(input.next() != null)//判断是否有输入
12 {
13 CallBackObject.run();
14 }
15 }
16 }
运行程序:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 //创建控制器对象,将提供给它的回调对象传入
6 Controller obj = new Controller(new CallBackClass());
7 //启动控制器对象运行
8 obj.Begin();
9 }
10 }
在控制器类中引用了回调对象,因此就能调用回调方法,当控制器进行某些判断之后(如:监听鼠标单击操作)就会自动调用回调方法!简易流程图如下:
分享到:
相关推荐
base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz
阿里巴巴的Java笔试题尤为注重这一点,即使部分题目与直接的编程技能无直接关联,但通过这些题目的考察,可以有效地筛选出具备成为优秀Java开发者的潜质的人才。 首先,类似于肯尼迪总统讲话假设这类题目,考察求职...
该项目为“studyjava-zz”设计源码,深入探索Java编程新视野,共计包含549个文件,涵盖209个Java源代码文件、74个Git忽略文件、70个项目配置文件、68个classpath文件、66个偏好设置文件、25个Markdown文档、16个XML...
了解线程池的设计思想后,开发者可以利用`Executors`类提供的静态工厂方法快速创建线程池,如`newFixedThreadPool`、`newSingleThreadExecutor`、`newCachedThreadPool`等。但需要注意的是,这些预定义的线程池可能...
在Java中,你可以先定义一个数据类,然后创建一个LogisticRegression类,包含初始化、训练、预测等方法。训练过程中,你需要实现梯度上升法或优化算法,每次迭代更新权重。预测时,使用Sigmoid函数计算概率并根据...
本项目“zz.rar_JAVA俄罗斯方块”提供了一套完整的JAVA源代码,让开发者可以深入理解如何用JAVA语言实现这个经典游戏。本文将详细解析该项目中的关键知识点,帮助读者更好地理解和掌握JAVA编程技巧。 1. **JAVA基础...
当队列中有新消息时,RabbitMQ会回调预先设置的回调函数,处理消息。 7. **消费消息**:在回调函数中,可以获取消息内容,并进行相应的业务处理。处理完成后,需要确认消息已被消费,通常使用`channel.basicAck`...
《聊天工具的Java开发:超越QQ,天翔ZZ》 在IT行业中,开发一款聊天工具是一项挑战性十足的任务,尤其当目标是超越如QQ这样的巨头时。本文将深入探讨使用Java语言开发聊天工具的关键知识点,结合"天翔ZZ"这个项目,...
### Java集合类总结 在Java开发中,集合类(Containers)是极其重要的组成部分,它们作为开发者日常编程不可或缺的工具,不仅让代码变得更加简洁、高效,还能显著提升程序的功能性和灵活性。本文将对Java标准类库中...
基于java的招聘求职系统_886zz792.zip
ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB
使用LoopSim方法,我们合并ZZ和ZZ + jet的NLO QCD结果,并获得ZZ产生的近似NNLO预测。 还包括对ZZ过程的精确胶子融合环平方的贡献。 最重要的是,我们将来自胶子-胶子通道的胶子-融合ZZ + jet贡献添加到我们的合并...
ZZ Fibo Trader 是一款专为 MetaTrader 5(MT5)平台设计的自动交易专家顾问(EA),其核心在于结合了斐波那契回调线分析和抛物线止损系统,为交易者提供了智能化的交易策略。本文将深入探讨这款EA的设计理念、功能...
"zz牌类小游戏24点" 是一个基于Java编程语言开发的桌面游戏,其核心玩法是24点游戏。24点游戏是一种流行的心算游戏,玩家需要利用四张给出的扑克牌上的数字,通过加、减、乘、除运算,使得结果等于24。这个游戏旨在...
wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。
在 Java 8 中使用函数式编程生成字母序列是一个很大的挑战。Lukas Eder 愉快地接受了这个挑战,他将告诉我们如何使用 Java 8 来生成ABC的序列——当然,肯定不是一种蹩脚的方式。 我被 Stack Overflow 上网友...
《中医大夫助理信息系统 zz-doctor 深度解析》 中医大夫助理信息系统“zz-doctor”是一款基于Android平台的应用程序,旨在为中医医生提供智能化、便捷化的诊疗辅助工具。通过深入剖析这款应用的源码,我们可以了解...
在存储库中的不同实现可能包含使用switch语句、使用函数或方法来封装逻辑、或者使用更复杂的条件组合,以展示不同编程风格和技巧。 项目中将这些实现打包在一起,意味着你可以比较各种解决方案,理解它们的优缺点,...
在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。