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

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

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

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

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

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

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

  1. package deep;
  2. /**
  3. * 定义回调函数接口
  4. * @author DeepSleeping
  5. *
  6. */
  7.  
  8. public interface ICookOver {
  9.  
  10. void cookOver();
  11. }
  1. package deep;
  2.  
  3. /**
  4. *
  5. * @author DeepSleeping
  6. *
  7. */
  8. public class Mom implements ICookOver{
  9.  
  10. //定义妈妈做好饭后会怎么样的方法
  11. @Override
  12. public void cookOver() {
  13. System.out.println("妈妈把饭做好了,去洗个手来吃饭!");
  14. }
  15.  
  16. }
  1. package deep;
  2.  
  3. /**
  4. *
  5. * @author DeepSleeping
  6. *
  7. */
  8. public class Son {
  9. ICookOver cookOver;
  10.  
  11. public Son(){
  12.  
  13. }
  14.  
  15. public Son(ICookOver cookOver){
  16. this.cookOver = cookOver;
  17. }
  18.  
  19. public void setCookOver(ICookOver cookOver) {
  20. this.cookOver = cookOver;
  21. }
  22.  
  23. //做其他事情知道妈妈把饭做好了
  24. public void doOtherUtillCookOver(){
  25.  
  26. System.out.println("儿子在做作业");
  27. System.out.println("作业做完了在打游戏");
  28.  
  29. System.out.println("--------------------------------------");
  30.  
  31. //妈妈的饭做好了调用接口中的方法
  32. cookOver.cookOver();
  33.  
  34. System.out.println();
  35. System.out.println("儿子去洗手了");
  36. System.out.println("儿子去吃饭了");
  37. }
  38.  
  39. }
  1. package deep;
  2.  
  3. public class TestCallBack {
  4.  
  5. public static void main(String[] args) {
  6. Mom mom = new Mom();
  7. Son son = new Son();
  8. son.setCookOver(mom);
  9.  
  10. son.doOtherUtillCookOver();
  11. }
  12. }

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

  1. package deep;
  2.  
  3. public class TestCallBack {
  4.  
  5. public static void main(String[] args) {
  6. Mom mom = new Mom();
  7. Son son = new Son(mom);
  8. son.doOtherUtillCookOver();
  9. }
  10. }

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

  1. package deep;
  2.  
  3. public class TestCallBack {
  4.  
  5. public static void main(String[] args) {
  6. Son son = new Son(new ICookOver() {
  7.  
  8. @Override
  9. public void cookOver() {
  10. System.out.println("匿名实现类实现---");
  11. System.out.println("妈妈把饭做好啦~快来吃饭!");
  12. }
  13. });
  14. son.doOtherUtillCookOver();
  15. }
  16. }

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. 在码云(gitee)上展开程序类课程教学

    码云主要提供了源代码管理(Git/SVN)功能,最近又推出了高校版让普通老师也能利用起来以供教学使用. 学生与老师不仅能利用其管理代码,更重要的是我们的程序教学能通过对git的使用来引入业界流行的软件 ...

  2. python写的计算器

    import tkinter #导入tkinter模块 root = tkinter.Tk()root.minsize(280,500)root.title('xx的计算器') #1.界面布局#显示面 ...

  3. less编译工具——koala使用介绍

    1:使用koala编译软件    官网:http://koala-app.com/index-zh.html (目前官网点击下载没有反应,有人说可能是网络问题,但真正的原因是需要FQ才能下载了) 百度 ...

  4. [Postman]请求(6)

    您可以从以下位置创建并保存请求: 工作区构建视图 新按钮 启动屏幕 使用新按钮 在标题工具栏中,单击“ 新建”按钮. 出现“新建”屏幕. 在SAVE REQUEST屏幕中: 输入您的请求的标题和说明. ...

  5. H5拖动实现代码

    原理以后有空再说现在嘛先上代码.... ;} html,body { width: 100%; height: 100%; ; } #dragBoxContainer{ width: 150px; p ...

  6. mongoose的基本操作方法

    mongoose 1. const mongoose = require("mongoose");导入mongoose模块 2. //注意url地址最后面的地址是数据库的名称    ...

  7. Vue : Expected the Promise rejection reason to be an Error

    在vue项目中添加ESLint,new 一个 Promise 一直显示错误 :Expected the Promise rejection reason to be an Error 正常来说new ...

  8. Java后端工程师必备书单(含大后端方向相关书籍)

    学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. 一: ...

  9. 多线程编程学习笔记——使用异步IO

    接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...

  10. Chapter 4 Invitations——8

    "So," Mike said, looking at the floor, "Jessica asked me to the spring dance." “ ...