java の 回调函数

C语言中回调函数(Callback Function)解释:

函数是用来被调用的,我们调用函数的方法有两种:

· 直接调用:在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行。这里,A称为“主叫函数”(Caller),B称为“被叫函数”(Called)。

· 间接调用:在函数A的函数体里并不出现函数B的函数名,而是使用指向函数B的函数指针p来使内存中属于函数B的代码片断得以执行——听起来很酷,是吧!

  比起直接调用来,间接调用的确麻烦,那为什么还要使用间接调用呢?原因很简单——直接调用把函数名都写进

  函数体了,经过编译器那么一编译,板上钉钉,A注定调用的是B了,这样的程序只能按照程序员事先设计好的流

  程执行下去,太呆板了。此时,间接调用的巨大灵活性就显现出来了。想一想,如果p是函数A的一个参数(参数

  是变量,是变量就可以变吗!),那么程序的最终用户完全可以通过操作来改变p的指向——这样,A在通过p

  用函数的时候就有机会调用到不同的函数,这样程序的实用性和扩展性就强多了。

java中的直接调用:

View Code
public class TestCallBack
{
    
    public static void methodB(){
        for(int i=0;i<100000000;i++){}
    }
    
    //主叫函数
    public void methodA(){
        long begin = System.currentTimeMillis();
        methodB();//被叫函数
        long end = System.currentTimeMillis();
        System.out.println("[use time]:"+begin+"#"+end+"#"+(end-begin));
        
    }
    
    public static void main(String[] args)
    {
        TestCallBack t = new TestCallBack();
        t.methodA();
    }
}

java中的间接调用:

定义接口:(必须的,功能类似指针)

//定义回调所需的接口
public interface CallBack{
    //执行回调操作的方法
    void execute();
}
View Code
public class TestCallBack
{
    
    public void methodA(CallBack callback){
        long begin = System.currentTimeMillis();
        callback.execute();//执行回调函数
        long end = System.currentTimeMillis();
        System.out.println("[use time]:"+begin+"#"+end+"#"+(end-begin));
        
    }
    
    public static void main(String[] args)
    {
        TestCallBack t = new TestCallBack();
        t.methodA(new CallBack()
        {
            @Override
            public void execute()
            {
                System.out.println("执行任意回调的方法。。。");
            }
        });
    }
}

什么是回调函数:

一个简单的例子:
系统要调用你的函数,但它不可能知道你的函数的函数名,调用规则,参数列表,所以你必须把这个函数的地址给他,并且遵循一定的调用规则,参数列表,以及返回值。

我们定义了callback函数,在其中写了很多的代码,但我们自己却从来没有调用过它。

原文地址:https://www.cnblogs.com/zyoohoo/p/2531058.html