回调函数
http://www.cnblogs.com/wangchenyang/archive/2011/08/16/2140744.html
函数是用来被调用的,我们调用函数的方法有两种:
1. 直接调用:在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行。这里,A称为“主叫函数”(Caller),B称为“被叫函数”(Callee)。
2. 间接调用:在函数A的函数体里并不出现函数B的函数名,而是使用指向函数B的函数指针p来使内存中属于函数B的代码片断得以执行, p可以是函数A的一个参数
在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就称为回调。
在C/C++中,要用回调函数,被调用函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,可以通过接口(interface)来实现定义回调函数。
在C语言中,回调函数通常通过函数指针来传递;在Java中,是将一个对象作为参数传给别人的程序。
1 package com.callback; 2 3 /** 4 * @since 2012-02-02 5 * @desc 定义回调接口 6 */ 7 public interface CallBackInterface { 8 9 public void doSome(); 10 11 public void exectueMethod(); 12 } 13 14 15 16 17 package com.callback; 18 19 /** 20 * @since 2012-02-02 21 * @desc 主程序 22 */ 23 public class MethodB { 24 25 //该方法接收一个实现了回调接口的对象作为参数 26 public double getTime(CallBackInterface callBack) { 27 long start = System.currentTimeMillis(); 28 callBack.exectueMethod(); 29 long end = System.currentTimeMillis(); 30 System.out.println("cost time=" + (end - start)); 31 return end - start; 32 } 33 } 34 35 36 37 38 package com.callback; 39 40 /** 41 * @since 2012-02-02 42 * @desc 回调,实现回调接口 43 */ 44 public class MethodA implements CallBackInterface{ 45 public void testMethod(){ 46 for(int i=0;i<10000;i++){ 47 System.out.print(""); 48 } 49 } 50 public static void main(String args[]){ 51 MethodB b=new MethodB(); 52 double d=b.getTime(new CallBackInterface() { 53 54 //新建一个对象,实现回调接口,将对象作为参数传递 55 public void exectueMethod() { 56 new MethodA().testMethod(); 57 } 58 59 @Override 60 public void doSome() { 61 62 } 63 }); 64 System.out.println("d="+d); 65 } 66 67 68 }