`

Java回调函数的理解 .

 
阅读更多
转自:http://www.cnblogs.com/wangchenyang/archive/2011/08/16/2140744.html 所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。


    下面举个通俗的例子:
    某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。这个例子说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。



    通过上面个人感觉到回调更多的应用就是结合异步。比如:Ajax中js通过组件和服务器的异步通信。



例:

    程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。目的达到。在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数。
     假设我是程序员A,以下是我的程序a:


[java] view plaincopyprint?
01.public class Caller 
02.{ 
03.    public MyCallInterface mc; 
04. 
05.    public void setCallfuc(MyCallInterface mc) 
06.    { 
07.       this.mc= mc; 
08.    } 
09. 
10.    public void call(){ 
11.       this.mc.method(); 
12.    } 
13.}     
public class Caller
{
    public MyCallInterface mc;

    public void setCallfuc(MyCallInterface mc)
    {
       this.mc= mc;
    }

    public void call(){
       this.mc.method();
    }
}   
 



     我还需要定义一个接口,以便程序员B根据我的定义编写程序实现接口。
[java] view plaincopyprint?
01.public interface MyCallInterface 
02.{ 
03.    public void method(); 
04. 
05.} 
public interface MyCallInterface
{
    public void method();

}



     于是,程序员B只需要实现这个接口就能达到回调的目的了:
[java] view plaincopyprint?
01.public class B implements MyCallInterface 
02.{ 
03.    public void method() 
04.    { 
05.       System.out.println("回调"); 
06.    } 
07. 
08.    public static void main(String args[]) 
09.    { 
10.       Caller call = new Caller(); 
11.       call.setCallfuc(new B()); 
12.       call.call(); 
13.    } 
14.} 
分享到:
评论

相关推荐

    Java回调函数的理解

    某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出...我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。

    回调函数实例练习

    这个程序是我在理解回调函数时编写的一个Demo. 里面包含了三部分: 1.回调函数 2.观察者模式 3.代理模式 配套有CSDN博文:关于回调函数的理解,以及观察者模式,代理模式

    回调函数总结

    java开发总结对回调函数的理解,以及描述,举例等..................

    Android回调函数的例子

    Java回调函数的理解。通过在Android小程序下运行一个Java回调程序。代码内部有简单讲解。

    Java 回调函数深入理解

    主要介绍了 Java 回调函数深入理解的相关资料,需要的朋友可以参考下

    java 回调函数的理解

    NULL 博文链接:https://984247235.iteye.com/blog/2019730

    再谈java回调函数

    个人对于回调函数的理解就是回调函数就是回头再调用的函数,哈哈,下面我们来详细探讨下回调函数。

    理解javascript回调函数

    这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB。当B层要用到某个模块的数据,于是他对A层人员说,我需要你们提供满足某种需求的数据,你...

    Android编程之匿名内部类与回调函数用法分析

    及其其中的回调函数,例如,我们给Button设置监听器时候通常要实现OnCLickListener接口,并重写其中的Onclick()方法,这就是匿名内部类与回调函数,那么你对Java匿名内部类以及回调函数又理解多少呢?这篇文档给予...

    javascript回调函数的概念理解与用法分析

    本文实例讲述了javascript回调函数的概念理解与用法。分享给大家供大家参考,具体如下: 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就...

    理解javascript中的回调函数(callback)

    最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用。如果这个概念理解不了,nodejs、express 的代码就会看得一塌糊涂。比如: 代码如下: app.use(function(req, res, next) {  var err = new ...

    java 编程入门思考

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    Java初学者入门教学

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.8.2 使用专门的监听器实现回调 448 10.8.3 为全部实体配置默认监听器 450 10.8.4 排除监听器 452 10.9 本章小结 455 第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 面向对象的JPQL 457 11.1.2 查询API简介 ...

    java联想(中文)

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    Thinking in Java 中文第四版+习题答案

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    JAVA_Thinking in Java

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    Thinking in Java简体中文(全)

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

Global site tag (gtag.js) - Google Analytics