回调函数

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 }

 



posted @ 2012-07-17 22:44  goooooooooo  阅读(286)  评论(0编辑  收藏  举报