Java 回调函数深入理解

 Java 回调函数

概要:

所谓回调,就是客户程序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:

public class Caller
{
  public MyCallInterface mc; 

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

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

我还需要定义一个接口,以便程序员B根据我的定义编写程序实现接口。

public interface MyCallInterface
{
  public void method(); 

}

于是,程序员B只需要实现这个接口就能达到回调的目的了:

public class B implements MyCallInterface
{
  public void method()
  {
    System.out.println("回调");
  } 

  public static void main(String args[])
  {
    Caller call = new Caller();
    call.setCallfuc(new B());
    call.call();
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java回调函数实例代码详解

    首先说说什么叫回调函数? 在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就 称为回调.在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃. 这样的解释似乎还是比较难懂,这里举个简 单的例子: 程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到

  • 再谈java回调函数

    又遇到了回调函数,这次打算写下来分享一下. 所谓回调函数,或者在面向对象语言里叫回调方法,简单点讲,就是回头在某个时间(事件发生)被调用的函数. 再详细点:就是一个函数A,作为参数,传入了另一个函数B,然后被B在某个时间调用. 这里可以有疑问了,既然是一个函数调用另一个函数,可以在函数体里面调用啊,为什么还要把函数作为参数传到另一个函数里被调用?何况还有一些语言(比如java)不支持把函数作为参数. 对的,确实可以在函数体里调用另一个函数,功能上好像是没差别的,但是这里有一个问题,就是你要调用的

  • Java通过匿名类来实现回调函数实例总结

    在C语言中,函数名可以当做函数指针传递给形参从而实现回调 void f1() { printf("f1()\n"); } void f2() { printf("f2()\n"); } void f3() { printf("f3()\n"); } void do_func(void(*f)()) { f(); } int main() { do_func(f1); do_func(f2); do_func(f3); } 在C++11中,实现回调

  • 基于Java 谈回调函数

    杂谈 还是习惯,写点什么之前,都喜欢来点杂谈. 最近都在搞微信的开发,终于在昨晚进入测试阶段了,好快就测出 bug 来,但也好快修复了.这也让我更担心. 虽说是进入内测阶段,但那代码的结构也真太难看了,还得好好重构一下.迟点得写写关于这微信公众号的开发文章.下次再详谈. 今天开始了三天半的小长假,但我还是坚守在学校.有点不知道为了什么. 刚给 wp 装了个 markdown 插件,爽歪歪!! 在写这篇文章的时候,还是用着 wordpress 的,但在发表的时候,已经换成 hexo 了.原因:没有

  • Java 回调函数详解及使用

    Java 回调函数详解 前言: C语言中回调函数解释: 回调函数(Callback Function)是怎样一种函数呢? 函数是用来被调用的,我们调用函数的方法有两种: 直接调用:在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行.这里,A称为"主叫函数"(Caller),B称为"被叫函数"(Callee). 间接调用:在函数A的函数体里并不出现函数B的函数名,而是使用指向函数B的函数指针p来使内存中属于函数B的代码片断得以执行--听

  • Java 回调函数深入理解

     Java 回调函数 概要: 所谓回调,就是客户程序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以及Ja

  • Java回调函数与观察者模式实例代码

    本文研究的主要是Java回调函数与观察者模式的实现,具体介绍和实现代码如下. 观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式.模型-视图(View)模式.源-收听者(Listener)模式或从属者模式)是软件设计模式的一种.在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实现事件处理系统. 什么时候使用观察者模式: 当一个抽象模型有两个方面, 其中一个方面依

  • Java回调函数原理实例与代理模式的区别讲解

    java 回调函数例子,及其原理,与代理模式的区别 回调函数 应用程序(application program)会时常通过API调用库里所预先备好的函数.但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务.这个被传入的.后又被调用的函数就称为回调函数(callback function). 作用: 可以把调用者与被调用者分开.调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型.某些限制条件(如返回值为int)的被调

  • C++回调函数的理解和使用教程

    一.回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应. 回调函数机制: 1.定义一个函数(普通函数即可): 2.将此函数的地址注册给调用者: 3.特定的事件或条件发生时,调用者使用函数指针调用回调函数. 注:为什么要特定事件或条件发生?不应该随时都可以调用回调函数吗? 以下是回调函数

  • 关于c语言中回调函数的理解

    前言 在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 这段话不是那么好理解,不同语言实现回调的方式有些许不同.其实可以这样理解,回调就是在一个函数中调用另外一个函数. 在c语言中,回调是使用函数指针来实现的. 函数指针--顾名思义,是指向一个函数的指针.通常函数指针有两个方面的用途,一个是转换表(jump table),另一个是作为参数传递给一个函数. 下面是两个函数指针的声明 int(*f)(i

  • JS回调函数深入理解

    本文实例讲述了JS回调函数.分享给大家供大家参考,具体如下: 一.前奏 在谈回调函数之前,先看下下面两段代码: 不妨猜测一下代码的结果. function say (value) { alert(value); } alert(say); alert(say('hi js.')); 如果你测试了,就会发现: 只写变量名  say   返回的将会是 say方法本身,以字符串的形式表现出来. 而在变量名后加()如say()返回的就会使say方法调用后的结果,这里是弹出value的值. 二.js中函数

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

    本文实例讲述了Android编程之匿名内部类与回调函数用法.分享给大家供大家参考,具体如下: 我们Android开发中经常用到一些匿名内部类,及其其中的回调函数,例如,我们给Button设置监听器时候通常要实现OnCLickListener接口,并重写其中的Onclick()方法,这就是匿名内部类与回调函数,那么你对Java匿名内部类以及回调函数又理解多少呢?这篇文档给予比较详细的解释. 首先应该知道,内部类是JAVA语言的主要附加部分.内部类几乎可以处于一个类内部任何位置,可以与实例变量处于同

随机推荐