zoukankan      html  css  js  c++  java
  • 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函数,在其中写了很多的代码,但我们自己却从来没有调用过它。

  • 相关阅读:
    SpringCloud学习(三)服务消费者(Feign)(Finchley版本)
    go爬虫系列
    SpringCloud学习(二)服务消费者(rest+ribbon)(Finchley版本)
    SpringCloud学习(一)服务的注册与发现Eureka(Finchley版本)
    JDK源码分析(11) ConcurrentLinkedQueue
    ServiceFabric极简文档-4.1 学习路线图
    ServiceFabric极简文档-4.0 开发环境搭建
    ServiceFabric极简文档-3. 发布脚本
    ServiceFabric极简文档-2 部署环境搭建-配置文件
    ServiceFabric极简文档-1.3删除群集
  • 原文地址:https://www.cnblogs.com/zyoohoo/p/2531058.html
Copyright © 2011-2022 走看看