前不久学习了代理模式,其中有一个核心之一是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. [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)

    星期二, 10. 七月 2018 01:01上午 - beautifulzzzz 一.SDCC(Small Device C Compiler)编译环境搭建 SDCC是一个小型设备的C语言编译器,该编 ...

  2. 通过脚本下载GO被墙或常用的相关包

    脚本描述 脚本依赖环境:Windows,GO,GIT 脚本将创建 temp 目录,并拷贝相关包到第一个 GOPATH 中 可将脚本保存到本地自行添加被墙或者常用的包 完整脚本代码 @echo off ...

  3. ThreadLocal类的简单使用

    1.概述变量值的共享可以使用public 是static 变量的形式,所有的线程都使用同一个public static 变量. 如实现线程内的共享变量,jdk提供了ThreadLocal来解决这个问题 ...

  4. Android 音视频开发(二):使用 AudioRecord 采集音频PCM并保存到文件

    版权声明:转载请说明出处:http://www.cnblogs.com/renhui/p/7457321.html 一.AudioRecord API详解 AudioRecord是Android系统提 ...

  5. Linux(Ubuntu18.04)安装Chrome浏览器

    一分钟安装教程! 1.将下载源加入到系统的源列表(添加依赖) sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt ...

  6. Java学习笔记一:数据类型I

    GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/IntPractice1.java https://github.com ...

  7. Tomcat 的 server.xml 文件详解

    文件内容解读 <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apac ...

  8. Day6:html和css

    Day6:html和css 复习 margin: 0; padding: 0; <!DOCTYPE html> <html lang="en"> <h ...

  9. mongoose的save无效的问题

    概述 今天朋友遇到了使用mongoose中的save无效的问题,我通过查找资料帮他解决了,把心得记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: Mongoose学习参考文档--基础篇 M ...

  10. LabVIEW(九):程序结构中的分支结构和顺序结构

    一.分支结构 1.创建分支结构:程序框图右键>结构>条件结构 2.Ctrl + I 会显示错误列表,双击错误列表会定位到该错误在程序框图中地方. 3.有的分支可以不连接分支内容. 在不连接 ...