前不久学习了代理模式,其中有一个核心之一是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. Kali学习笔记19:NESSUS安装及使用

    Nessus 百度百科:Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件.总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件. 就我而言:漏洞扫描方面最强大的工具之 ...

  2. docker 简单介绍及基础命令运用

    一.什么是docker? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. 简单的来讲Docker实际上就是一个大型容器.容器是完全使用沙箱机制,相互之间不 ...

  3. 剑指offer【03】- 从尾到头打印链表(4种实现方法)

    题目:从尾到头打印链表 考点:链表 题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 法一:ArrayList头插法 /** * public class ListNode ...

  4. 【shiro】(3)---了解Shiro

    了解Shiro 一Apache Shiro作用 Apache Shiro是一个功能强大且易于使用的Java安全框架,可执行身份验证,授权,加密和会话管理,令行应用程序. Shiro提供了应用程序安全A ...

  5. Linux编程 9 (shell类型,shell父子关系,子shell用法)

    一. shell类型 1.1  交互式 bin/ shell程序 当用户登录到某个虚拟控制台终端或是在GUI中启动终端仿真器时,默认的shell程序就会开始运行.系统启动什么样的shell程序取决于你 ...

  6. 项目ITP(五) spring4.0 整合 Quartz 实现任务调度

    前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用.然后需要的是 上课前20分钟 ,幸好在帮带我的学长做 p2p 的时候,接触过.自然 quartz 是首选.所以我就配置了 ...

  7. fail2ban[防止linux服务器被暴力破解]

    一 介绍fail2ban fail2ban 可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH. SMTP.FTP密 ...

  8. Node.js 使用 RSA 做加密

    RSA RSA加密算法是一种非对称加密算法. 假设 A 与 B 通信.A 和 B 都提供一个公开的公钥.A 把需要传递的信息,先用自己的私钥签名,再用 B 的公钥加密.B 接收到这串密文后,用自己的私 ...

  9. vc-mysql-sniffer统计MySQL的SQL分布

    有时候我们需要统计线上的SQL执行情况,比如想知道哪条SQL执行最频繁,我们可以开启general_log,然后进行统计,但是general_log开启非常损耗性能,那么我们可以使用vc-mysql- ...

  10. python面向对象入门(1):从代码复用开始

    本文从代码复用的角度一步一步演示如何从python普通代码进化到面向对象,并通过代码去解释一些面向对象的理论.所以,本文前面的内容都是非面向对象的语法实现方式,只有在最结尾才给出了面向对象的简单语法介 ...