一、回调机制概述

    回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走。俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破!
    回调机制是什么?其实回调机制一直在我们身边存在着,只是我们习惯了存在就未曾察觉,懂得其原理就很简单了。
    先打个比方,设置场景如下,教师,成绩差学生A,成绩好学生B,详细步骤如下:
   (1)教师让学生A计算 一道题目 a+b=?
   (2)学生A苦于技能cd(臣妾做不到),不会计算,请求学生B帮忙完成
   (3)学生B根据学生A告诉他的 a和b的值计算出最后的答案,然后传给学生A
   (4)学生A得知到计算的答案,欢喜地告诉教师
二、实现代码解析
    (1)先定义一个统一的接口
public interface CallBack {
public void solve(int result);
}
    (2)Class A的实现
尤其注意的是,StudentA初始化时,需要传入StudentB的对象,方便在请求帮助的时候有指定的对象
public class StudentA implements CallBack{
private StudentB mStuB; public StudentA(StudentB mStuB){
this.mStuB = mStuB;
} public void askQuestion(final int a,final int b){
new Thread(new Runnable(){ @Override
public void run() {
// TODO Auto-generated method stub
mStuB.executeMessage(StudentA.this, a, b);
} }).start();
} @Override
public void solve(int result) {
// TODO Auto-generated method stub
System.out.println(result);
}
}

(3)Class B的实现

public class StudentB {

	public void executeMessage(CallBack callBack,int a,int b){
System.out.println("A的问题是:"+a +" + "+ b+"=?"); int result = a + b; callBack.solve(result);
} }

(4)值的初始化

public class CallBackTest {

	/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 1;
int b = 1; StudentB mStuB = new StudentB();
StudentA mStuA = new StudentA(mStuB); mStuA.askQuestion(a,b);
}
}
三、总结
    参考网上经典的诠释如下:
  • Class A实现接口CallBack callback——背景1
   public Class StudentA implements CallBack
  • Class A中包含一个class B的引用b ——背景2  
    Student A初始化的时候,传入Student B的对象 mStuB,便于在执行askQuestion方法时,有指向的mStuB对象
  • class B有一个参数为callback的方法f(CallBack callback) ——背景3
    Student B在执行完请求后,需要回调告知StudentA,故需要通过callback变量来传递,使用了父类引用指向子类对象
  • A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
    mStuA.askQuestion(a,b) -> mStuB.executeMessage(StudentA.this, a, b)
  • 然后b就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D
    executeMessage() -> callBack.solve(result) (父类引用指向子类对象)
 
四、相关推荐
http://blog.csdn.net/xiaanming/article/details/8703708/
 

JAVA回调机制解析的更多相关文章

  1. java回调机制及其实现(转)

    1. 什么是回调函数 回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机.回调 ...

  2. Java回调机制总结

    调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b( ...

  3. 转 Java Classloader机制解析

    转 Java Classloader机制解析 发表于11个月前(2014-05-09 11:36)   阅读(693) | 评论(0) 9人收藏此文章, 我要收藏 赞1 慕课网,程序员升职加薪神器,点 ...

  4. 转:一个经典例子让你彻彻底底理解java回调机制

    一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...

  5. JAVA回调机制(CallBack)详解

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  6. 深入浅出: Java回调机制(异步)

    一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...

  7. JAVA 回调机制(callback)

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  8. 浅谈Java回调机制

    像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...

  9. Java基础9:解读Java回调机制

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

随机推荐

  1. HTML5 Boilerplate - 让页面有个好的开始

    最近看到了HTML5 Boilerplate模版,系统的学习与了解了一下.在各种CSS库.JS框架层出不穷的今天,能看到这么好的HTML模版,感觉甚爽.写篇博客,推荐给大家使用.   一:HTML5 ...

  2. 一步一步使用ABP框架搭建正式项目系列教程

    研究ABP框架好多天了,第一次看到这个框架的名称到现在已经很久了,但由于当时内功有限,看不太懂,所以就只是大概记住了ABP这个名字.最近几天,看到了园友@阳光铭睿的系列ABP教程,又点燃了我内心要研究 ...

  3. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  4. angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流

    大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子

  5. 在Linux系统下运行微信Web开发者工具

    微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折. 注:带 * 的步骤或文件为不确定是否管用的步骤或文件.本人系统为Linux ...

  6. WPF 捕获键盘输入事件

    最近修改的一个需求要求捕获键盘输入的 Text,包括各种标点符号. 最开始想到的是 PreviewKeyDown 或者 PreviewKeyUp 这样的键盘事件. 但是这两个事件的对象 KeyEven ...

  7. UVA, 10336 Rank the Languages

    难点在于:递归函数和输出: #include <iostream> #include <vector> #include <algorithm> #include ...

  8. web服务器集群

    概述 集群和分布式都是从集中式进化而来的.分布式和集群会相互合作的,同时的集群和分布式.在这里重点说说集群 集群是什么? 集群能提高单位时间内处理的任务数量,提升服务器性能 有多台服务器去处理任务,但 ...

  9. 为什么 Android Studio 工程文件夹占用空间这么大?我们来给它减减肥

    偶然中发现Android Studio的工程文件夹比ADT Bundle的大很多.用Android Studio新建一个空工程,工程文件夹大小为30M,运行一次后大小为40M.同样用ADT Bundl ...

  10. Hbase安装和错误

    集群规划情况: djt1 active Hmaster djt2 standby Hmaster djt3 HRegionServer 搭建步骤: 第一步:配置conf/regionservers d ...