关闭

Java回调函数

标签: java函数指针
321人阅读 评论(0) 收藏 举报
分类:

回调函数在网上的讲解比较多,也是nodeJs里比较高级的特性,在Java里的回调函数就是指在服务端的函数可以调用客户端的代码,某百科的定义回调函数是“回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。”
关键就是将函数本身的引用传送到另一个函数,在Java中我们函数的调用是通过引用,所以我们会采用将当前对象本身的引用传递到另一个函数内部去执行。this关键字即是当前对象的引用。
我们可以写个demo,我们模拟server回调client。

class Client {
    Server server = new Server();
    // 2   调用服务
    public void callServer(String params) {
        System.out.println("client start to call server ...");
        sleep(1000);
        // 3 --- this传递当前对象引用
        server.state(this, "params come from client");
    }

    // 6    被回调的函数
    public void backFunction(String params) {
        System.out.println("client called by server ,params : " + params);
    }

    public static void sleep(int millions) {
        try {
            Thread.sleep(millions);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

class Server {

    // 1   模拟server启动
    static {
        System.out.println("server starting...");
        sleep(1000);
        System.out.println("server started...");
    }

    // 4    接收客户端引用
    public void state(Client client, String params) {
        System.out.println("server called by client, params : " + params);
        sleep(1000);
        System.out.println("server will call client...");
//      client.backFunction("server's params");   方式1
        callBack(client);
    }
    // 5   回调函数
    public void callBack(Client client) {
        System.out.println("server call client ...");
        sleep(1000);
        client.backFunction("server call client params");
    }

    public static void sleep(int millis) {
        try {
            Thread.sleep(millis);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
// 测试
        Client client = new Client();
        client.callServer("micro's client");

执行结果:

server starting...
server started...
client start to call server ...
server called by client, params : params come from client
server will call client...
server call client ...
client called by server ,params : server call client params

我们client首先用public void callServer(String params)调用Server,在内部调用server的时候将自身对象用this关键字传递到server,因此server内部也可以通过client.backFunction(“server call client params”);回调到client的函数,backFunction即是被回调的函数,callback称作毁掉函数。

0
0
查看评论

一个简单的java回调函数的实现

回调函数 回调函数涉及的3个函数 登记回调函数 回调函数 响应回调函数 简单的解释 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回...
  • oChenXiaoZuo1
  • oChenXiaoZuo1
  • 2014-07-10 15:39
  • 2454

深入理解Java回调函数

C语言中回调函数解释: 回调函数(Callback Function)是怎样一种函数呢? 函数是用来被调用的,我们调用函数的方法有两种: 1  直接调用:在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行。这里,A称为“主叫函数”(Caller),B称...
  • u010147215
  • u010147215
  • 2016-04-03 01:17
  • 5225

JAVA中的回调函数

JAVA中的回调函数    在以前的JAVA学习过程当中,不太注意理论知识的学习,所以在阅读thinking in java的时候,就没有太注意其中关于回调函数的介绍。今天,在阅读一段关于网络信使的源代码时,发现了有关回调函数的使用,对他产生了研究的兴趣,不过...
  • sweetwxh
  • sweetwxh
  • 2008-01-26 16:52
  • 23333

java 回调函数的入门Demo

一:回调:比如说: 张三和李四是好朋友,一天张三遇到一个问题需要李四帮忙计算一下,此时张三就给李四打电话,说 “李四,我是张三,我有一个问题请教你帮我计算一下?”,此时李四就开始计算此问题,计算完问题后就给张三打电话告诉他答案。李四打电话告诉张三答案的过程就是一个回调过程。 二:定义一个借口C...
  • AnQ17
  • AnQ17
  • 2016-04-07 15:05
  • 402

JAVA同步回调函数

1.概述 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。          同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;     &...
  • libaolin198706231987
  • libaolin198706231987
  • 2016-01-06 11:29
  • 598

java回调函数的作用以及运用

模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,也是我们在写程序中经常使用的;回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口,这句话可能有点绕,等文章后面举例说明;异步调用是一种类似消息或事件的机制,解决了同...
  • u010211479
  • u010211479
  • 2016-05-24 14:47
  • 3456

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

1. 什么是回调函数  回调函数(callback Function),顾名思义,用于回调的函数。 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性:  1、属于...
  • cangchen
  • cangchen
  • 2015-03-04 17:54
  • 3329

java 回调函数与匿名内部类

java匿名内部类的一个经典使用时在回调函数上: 一、 首先回调最经典的是在监听者模式上面: (1) 比如一个button.setOnClickListener(new OnClickListener(){            void ...
  • kg_second
  • kg_second
  • 2015-06-09 16:38
  • 596

java 回调函数的写法

/** * 回调函数解析 * 1、要在这个类里面实例化另外一个类里面的接口,传递数据过去 * 2、在另外一个类里面调用他的接口的方法,实际执行的是这个类里面的回调方法 */ // 这是pass类中的一个回调函数————这是Activity类 pass.get...
  • mimi5821741
  • mimi5821741
  • 2015-09-17 16:50
  • 1118

关于匿名内部类与回调函数

作者:步超                我们Android开发中经常用到一些匿名内部类,及其其中的回调函数,例如,我们给Button设置监听器时候通常要实现OnCLickListener接口,并重写其中的Onclic...
  • pku_android
  • pku_android
  • 2012-04-29 15:54
  • 2746
    个人资料
    • 访问:173017次
    • 积分:3891
    • 等级:
    • 排名:第9688名
    • 原创:220篇
    • 转载:4篇
    • 译文:0篇
    • 评论:41条