http://blog.csdn.net/allen_zhao_2012/article/details/8056665

2012-10-10 15:32 49963人阅读 评论(35) 收藏 举报
 分类:
J2SE(43) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

回调函数,第一次见是在Java编程思想中,以及后来的观察者模式也应用了回调函数的思想。但是一直都没有重视,终于在一次面试的时候吃亏了,越来越理解为什么很多人说Java编程思想这本书要一遍遍的看,吃透!

首先在网络上搜索很多文章介绍什么是回调函数,看的云里雾里的。后来自己一步步分解终于理解了,记录如下。

从维基百科上面摘抄定义:(看完本篇文章再来理解这个定义)

计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

在Java里面,我们使用接口来实现回调。

这篇文章中的解说定义非常好:http://blog.csdn.net/sweetwxh/article/details/2067139

所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。下面是例子。

1.  首先定义一个类Caller,按照上面的定义就是程序员A写的程序a,这个类里面保存一个接口引用。

  1. public class Caller {
  2. private MyCallInterface callInterface;
  3. public Caller() {
  4. }
  5. public void setCallFunc(MyCallInterface callInterface) {
  6. this.callInterface = callInterface;
  7. }
  8. public void call() {
  9. callInterface.printName();
  10. }
  11. }

2.  当然需要接口的定义,为了方便程序员B根据我的定义编写程序实现接口。

  1. public interface MyCallInterface {
  2. public void  printName();
  3. }

3.  第三是定义程序员B写的程序b

  1. public class Client implements MyCallInterface {
  2. @Override
  3. public void printName() {
  4. System.out.println("This is the client printName method");
  5. }
  6. }

4.  测试如下

  1. public class Test {
  2. public static void main(String[] args) {
  3. Caller caller = new Caller();
  4. caller.setCallFunc(new Client());
  5. caller.call();
  6. }
  7. }

看到这里应该明白什么是回调了,有些文章介绍的很好,但是刚开始没看明白,是因为把第3步的类省略,直接写成匿名类了。

5.  在测试方法中直接使用匿名类,省去第3步。

  1. public class Test {
  2. public static void main(String[] args) {
  3. Caller caller = new Caller();
  4. //      caller.setCallFunc(new Client());
  5. caller.setCallFunc(new MyCallInterface() {
  6. public void printName() {
  7. System.out.println("This is the client printName method");
  8. }
  9. });
  10. caller.call();
  11. }
  12. }

看完了上面的文章,直接看下面这篇文章:http://kidult.iteye.com/blog/148982

以上就是回调函数的全部理解。

最新文章

  1. CentOS6.5的vsftp搭建流程(一)
  2. linux下ssh的几种验证方式
  3. C# MVC 页面静态化导致的问题
  4. maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理
  5. java入门基础知识点总结
  6. [OpenCV](1)安装与测试
  7. wifi链接配置
  8. JPA与ORM以及Hibernate
  9. jQuery Ajax 实例 全解析
  10. js performance
  11. CodeForces 220(div 2)
  12. EF中的TPH、TPT、TPC
  13. linux_windows下配置tomcat区别 ,不同子域名映射不同 项目
  14. IO包中的其他类
  15. cygwin环境c语言开发
  16. 盒子浮动float
  17. [工具]K8tools github/K8工具合集/K8网盘
  18. 真爱如血第一季/全集True Blood迅雷下载
  19. registry-1.docker.io TimeOut 错误
  20. 为django平台生成模拟用户,建立用户组,并将用户加入组

热门文章

  1. Ruby-1
  2. IntelliJ IDEA手工安python装插件方法
  3. shell 中变量前"?"的作用
  4. BZOJ 1858 线段树
  5. clip 属性剪裁绝对定位元素
  6. G - 非常可乐
  7. 【并查集】【树】最近公共祖先LCA-Tarjan算法
  8. 学android: android-studio从main开始
  9. Lua IO库详解
  10. Java8新特性--lamada详解