Java回调函数
来源:互联网 发布:mac清理软件破解版 编辑:程序博客网 时间:2024/05/29 09:32
今天读了几篇关于回调函数的文章,现在总结一下:
函数是用来被调用的,我们调用函数的方法有两种:
1、 直接调用:在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行。这里,A称为“主叫函数”(Caller),B称为“被叫函数”(Callee);
2、 间接调用:在函数A的函数体里并不出现函数B的函数名,而是使用指向函数B的函数指针p来使内存中属于函数B的代码片断得以执行。
比起直接调用来,间接调用的确麻烦,那为什么还要使用间接调用呢?原因很简单——直接调用把函数名都写进函数体了,经过编译器那么一编译,板上钉钉,A注定调用的是B了,这样的程序只能按照程序员事先设计好的流程执行下去,太呆板了。此时,间接调用的巨大灵活性就显现出来了。想一想,如果p是函数A的一个指针参数(参数是变量),那么程序的最终用户完全可以通过操作来改变p的指向。这样,A在通过p调用函数的时候就有机会调用到不同的函数,这样程序的实用性和扩展性就强多了。在java中没有指针,这时便可以使用接口(interface)来实现自己的回调函数。
定义:回调函数,是指通过函数参数传递到其它代码的某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
很明显定义中说明了使用场景,即底层调用高层。其实回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,即高层调用底层,一般这个函数对高层都是已知的。而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,必须由高层进行安装。
代码:
Server端:
public class Server{ public interface ServerCallback { public void dosth(); } // 构造函数中直接调用了接口方法 public Server(ServerCallback callback) { callback.dosth(); }}
Client端:
public class Client{ public static void main(String args[]) { new Server(new MyServerCallback()); } private static class MyServerCallback implements ServerCallback { @Override public void dosth() { System.out.println("客户点回调服务器端,低层访问高层,区别于API"); } }}
参考:http://www.cnblogs.com/wangchenyang/archive/2011/08/16/2140744.html,这是篇不错的博文
- JAVA回调函数
- java回调函数
- Java回调函数
- Java 回调函数
- java回调函数
- Java 回调函数
- Java 回调函数
- Java回调函数
- Java回调函数
- java回调函数
- Java 回调函数
- Java 回调函数
- java回调函数
- Java 回调函数
- java 回调函数
- java回调函数
- java回调函数
- Java 回调函数
- epoll源码实现分析
- DirectDraw简介
- JavaScript学习方法
- poj3461 Oulipo【KMP】
- Zigbee的串口学习
- Java回调函数
- 如何使用struct_finddata_t结构体
- LeetCode Pascal's Triangle
- netstat命令使用实例
- Ubuntu 14.10(32位)上搭建Hadoop2.5.0单机伪分布式环境
- Android布局中LinearLayout的android:layout_gravity="bottom"不起作用
- 腾讯面试题总结,似乎是面试C++方向的(小巫总结)
- redis sort命令用法
- 欢迎使用CSDN-markdown编辑器