前不久学习了代理模式,其中有一个核心之一是Proxy.newProxyInstance();这里有三个参数,

  loader:目标对象的类加载器  interfaces:目标对象实现的所有接口组成的数组  handler:定义一个调用目标类中方法的回调类

所以我就在想,这个回调函数是什么,看源码也看不懂它怎么运转的。百度搜索了学习了一下,然后做了个小demo。

回调函数:就是一个函数调用另一个函数的过程。(调用某个函数,函数方法中有调用别的函数的动作)

我通过参考学习后自己先练习一个demo来学习深入回调函数。

demo情景:妈妈在做饭,儿子在妈妈把饭做好前要做别的事情比如做作业,打游戏。收到妈妈饭做好的消息后去洗手吃饭。

    如果没有回调函数,儿子在妈妈饭做好前什么事情也做不了。

 package deep;
/**
* 定义回调函数接口
* @author DeepSleeping
*
*/ public interface ICookOver { void cookOver();
}
 package deep;

 /**
*
* @author DeepSleeping
*
*/
public class Mom implements ICookOver{ //定义妈妈做好饭后会怎么样的方法
@Override
public void cookOver() {
System.out.println("妈妈把饭做好了,去洗个手来吃饭!");
} }
 package deep;

 /**
*
* @author DeepSleeping
*
*/
public class Son {
ICookOver cookOver; public Son(){ } public Son(ICookOver cookOver){
this.cookOver = cookOver;
} public void setCookOver(ICookOver cookOver) {
this.cookOver = cookOver;
} //做其他事情知道妈妈把饭做好了
public void doOtherUtillCookOver(){ System.out.println("儿子在做作业");
System.out.println("作业做完了在打游戏"); System.out.println("--------------------------------------"); //妈妈的饭做好了调用接口中的方法
cookOver.cookOver(); System.out.println();
System.out.println("儿子去洗手了");
System.out.println("儿子去吃饭了");
} }
 package deep;

 public class TestCallBack {

     public static void main(String[] args) {
Mom mom = new Mom();
Son son = new Son();
son.setCookOver(mom); son.doOtherUtillCookOver();
}
}

TestCallBack.class可以利用构造器加载mom

 package deep;

 public class TestCallBack {

     public static void main(String[] args) {
Mom mom = new Mom();
Son son = new Son(mom);
son.doOtherUtillCookOver();
}
}

TestClaaBack.class也可以直接用匿名实现类来实现同样功能,不过得手写实现类里的方法了。开头提到的Proxy.newProxyInstance();中在之前的代理模式的代码实现中也是利用了匿名实现类来处理实现的。

 package deep;

 public class TestCallBack {

     public static void main(String[] args) {
Son son = new Son(new ICookOver() { @Override
public void cookOver() {
System.out.println("匿名实现类实现---");
System.out.println("妈妈把饭做好啦~快来吃饭!");
}
});
son.doOtherUtillCookOver();
}
}

java回调函数学习的更多相关文章

  1. Java中的回调函数学习

    Java中的回调函数学习 博客分类: J2SE JavaJ#  一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置 ...

  2. Java中的回调函数学习-深入浅出

    Java中的回调函数一般来说分为下面几步: 声明回调函数的统一接口interface A.包括方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在c ...

  3. Java 回调函数

    下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的 ...

  4. java回调函数,看完就懂

    java回调函数在网上了看了些例子,比较绕,不够清晰,自己写的一个例子比较通俗,java回调其实很简单. 举个例子我是类B,我有个方法叫b(),现在我要调用类A中的方法a(),写个代码就是: publ ...

  5. Java回调函数的理解与实现

    回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 在Java里面,我们使用接口来实现回调.举个例子 所谓的回调,就是程序员 ...

  6. Java回调函数

    维基百科上的定义:在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 所谓回调,就是客户程序C调用服务程 ...

  7. 转Java 回调函数的理解

    所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数.一般说来,C ...

  8. JAVA回调函数ANDROID中典型的回调地方

    在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序. 在JAVA里面我们使用接口的方式来实现函数的回调. 回调的通俗就是:程序 ...

  9. Java回调函数的理解

    所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数.一般说来,C ...

随机推荐

  1. 关于C++用法的学习心得

    通过大一一学期对C++语言的学习,我感觉c++是一门有一定难度并且很有挑战性的科目,在c++学习过程中,我们懂得了其有很多的用法. 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确. ...

  2. UnityTips:使用反射调用内部方法拓展编辑器

    大家都知道Unity是一个C/C++的游戏引擎,C#只是Unity提供的脚本层.因此大部分功能都是通过C#来调用底层的C++代码的.而一些朋友可能不知道的是,其实Unity的C#代码中也有很多方法是我 ...

  3. Spark机器学习(上)

    1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”. l“ ...

  4. 达达O2O后台架构演进实践:从0到4000高并发请求背后的努力

    1.引言   达达创立于2014年5月,业务覆盖全国37个城市,拥有130万注册众包配送员,日均配送百万单,是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利 ...

  5. HTTP 协议中 GET 和 POST 方法详解

    GET请求报文分析 1.请求行 请求方法 GET(描述该请求采用了什么请求方法),HTTP 1.0 和 1.1 协议中共包含10种请求方法.不过 HTTP 1.1 中只有8种方法. URI 请求WEB ...

  6. Kali学习笔记6:二层发现

    先介绍下ARPING命令: arping命令是用于发送ARP请求到一个相邻主机的工具 arping使用arp数据包,通过PING命令检查设备上的硬件地址.能够测试一个IP地址是否是在网络上已经被使用, ...

  7. 我面试过没有上万人也有十几个,简历要这么写才有hr要你

    今天终于有时间好好给大家写写关于如何写简历,给自己加分了. 这篇文章拖了很久了应该说,本来想在上周写的,但是事情实在是太多,又不想草草了事,所以搁置到现在.今天早上正好空出来了,就马上给大家码出来了. ...

  8. python基础-字典(8)

    一.字典介绍 字典和列表一样,也是存储多个数据的容器,只不过存储和读取的方式不同 字典的语法格式: 字典名 = {key1 : value1,key2:value2,key3:value3,……} 说 ...

  9. SpringBoot2.1整合finereport10(帆软报表)

    最近,公司采购了帆软的系统,领导安排要与公司的SpringBoot框架进行整合.费了一番牛劲,终于整合成功,下面分享一下我的经验. 首先,我的开发环境是Intellij IDEA,使用的SpringB ...

  10. javaScript笔记详解(1)

    javaScript基础详解 版权声明 本文原创作者:雨点的名字 作者博客地址:https://home.cnblogs.com/u/qdhxhz/ 首先讲javaScript的摆放位置:<sc ...