001-java回调基础学习

转载 2012年01月17日 14:27:37

 回调函数还真有点像您随身带的BP机:告诉别人号码,在它有事情时Call您
回调用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。
其实回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,必须由高层进行安装,这个安装函数其实就是一个低层提供的API,安装后低层不知道这个回调的名字,但它通过一个函数指针来保存这个回调,

在需要调用时,只需引用这个函数指针和相关的参数指针。
其实:回调就是该函数写在高层,低层通过一个函数指针保存这个函数,在某个事件的触发下,低层通过该函数指针调用高层那个函数。

关于回调的总结:

在Java中,通常就是编写另外一个类或类库的人规定一个接口,然后你来实现这个接口,然后把这个接口的一个对象作为参数传给别人的程序,别人的程序必要时就会通过那个接口来调用你编写的函数。
下面使用java回调函数来实现一个测试函数运行时间的工具类:
如果我们要测试一个类的方法的执行时间,通常我们会这样做:
java 代码
public class TestObject {   
    /**  
     * 一个用来被测试的方法,进行了一个比较耗时的循环  
     */   
    public static void testMethod(){   
        for(int i=0; i<100000000; i++){   
               
        }   
    }   

/**  
     * 一个简单的测试方法执行时间的方法  
     */   
    public void testTime(){   
        long begin = System.currentTimeMillis();//测试起始时间   
        testMethod();//测试方法   
        long end = System.currentTimeMillis();//测试结束时间   
        System.out.println("[use time]:" + (end - begin));//打印使用时间   
    }   
public static void main(String[] args) {   
        TestObject test=new TestObject();   
        test.testTime();   
    }   
}   

大家看到了testTime()方法,就只有"//测试方法"是需要改变的,下面我们来做一个函数实现相同功能但更灵活:
首先定一个回调接口:
java 代码
public interface CallBack {   
    //执行回调操作的方法   
    void execute();   
}   

然后再写一个工具类:
java 代码
public class Tools {   
       
    /**  
     * 测试函数使用时间,通过定义CallBack接口的execute方法  
     * @param callBack  
     */   
    public void testTime(CallBack callBack) {   
        long begin = System.currentTimeMillis();//测试起始时间   
        callBack.execute();///进行回调操作   
        long end = System.currentTimeMillis();//测试结束时间   
        System.out.println("[use time]:" + (end - begin));//打印使用时间   
    }   
       
    public static void main(String[] args) {   
        Tools tool = new Tools();   
        tool.testTime(new CallBack(){   
            //定义execute方法   
            public void execute(){   
                //这里可以加放一个或多个要测试运行时间的方法   
                TestObject.testMethod();
            }   
        });   
    }   
       
}

通过上面的文字和代码我们可以理解了什么叫做java的回调。那么我们具体在什么时候使用回调函数呢?

在进行JDBC编程的时候,我们经常要写到try catch语句块,而如果采用回调技术,那么完全可以避免重复的去写,将自己的方法体使用一个回调接口的方法来实现,每次都传到同一个try catch当总,但是每一个方法的内容是不相同的。

回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口.

为了您的安全,请只打开来源可靠的网址
 
来自: http://hi.baidu.com/dongruofan/blog/item/9f68b003488e1810728da57a.html

 

 

001Java开发环境

Java 开发环境 1.linux操作系统
  • huayizhixing
  • huayizhixing
  • 2014年11月08日 10:17
  • 295

java回调基础学习

回调函数还真有点像您随身带的BP机:告诉别人号码,在它有事情时Call您 回调用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在...
  • arsenic
  • arsenic
  • 2012年02月06日 20:07
  • 262

学习心得-------计算机网络基础(1)

从复试结束之后就忙于奔波,甚是乏累,从沈阳来到北京就忙于找工作,少于看书,昨天终于决定入职,入职之后,做的方向是网络质量检测,APM,应用性能管理,给我的产品说明,只是寥寥几个字,各种术语,百度网络质...
  • Hearthougan
  • Hearthougan
  • 2016年04月21日 17:37
  • 1129

openstack学习笔记(一)-openstack的基础知识

一、openstack的基础知识 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。 Ope...
  • Forlogen
  • Forlogen
  • 2016年01月30日 16:23
  • 1896

java基础学习(eclipse)

java语言平台版本 J2SE(java 2 Platform Standard Edition)标准版 为开发普通桌面和商务应用程序提供的解决方案 J2ME(java 2 Micro Edit...
  • feihuan94
  • feihuan94
  • 2015年12月24日 15:36
  • 207

java学习(基础知识,适合学过c/c++的)

java简单数据操作java支持double类型取模double a = 5.6; double b = 11.8; double c = b % a; System.out.println(c);输...
  • qq_20576847
  • qq_20576847
  • 2016年12月10日 22:39
  • 239

经典书籍_java学习基础编程篇

经典书籍_java学习基础编程篇
  • shenzhq1980
  • shenzhq1980
  • 2015年09月11日 17:23
  • 22275

学习java基础的心得感悟

学完java基础,对java面向对象的思想有更加深刻的认识了,从学习java语言概述到最后网络编程IDE的使用,时间用了1个月零9天,上课时间28天,回首感觉快又感觉漫长,学的东西确实挺多的,很多知识...
  • zenghuachao
  • zenghuachao
  • 2017年05月07日 12:19
  • 221

网络基础学习笔记

1.1 ISO/OSI七层模型 1.2 TCP/IP四层模型 网际接口层:ARP协议 网际互联层:IP协议、IGMP协议、ICMP协议 传输层:TCP协议、UDP协议 应用层:为用户提供各种服务(FT...
  • u011683015
  • u011683015
  • 2014年12月23日 16:54
  • 325

JAVA学习需要什么基础

JAVA学习需要什么基础
  • javaniuniu
  • javaniuniu
  • 2017年02月04日 13:10
  • 3219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:001-java回调基础学习
举报原因:
原因补充:

(最多只允许输入30个字)