一、回调机制概述

    回调机制在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. 微信小程序开发心得

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...

  2. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  3. app开发外包注意事项,2017最新资讯

    我们见过很多创业者,栽在这app外包上.很多创业者对于app外包这件事情不是特别重视,以为将事情交给app外包公司就完事了,实际上不是的.无论是从选择app外包公司还是签订合同.售后维护等各方面都有许 ...

  4. jQuery之Deferred源码剖析

    一.前言 大约在夏季,我们谈过ES6的Promise(详见here),其实在ES6前jQuery早就有了Promise,也就是我们所知道的Deferred对象,宗旨当然也和ES6的Promise一样, ...

  5. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  6. Asp.net Core 初探(发布和部署Linux)

    前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Ne ...

  7. JavaScript将字符串中的每一个单词的第一个字母变为大写其余均为小写

    要求: 确保字符串的每个单词首字母都大写,其余部分小写. 这里我自己写了两种方法,或者说是一种方法,另一个是该方法的变种. 第一种: function titleCase(str) { var new ...

  8. Kotlin与Android SDK 集成(KAD 05)

    作者:Antonio Leiva 时间:Dec 19, 2016 原文链接:https://antonioleiva.com/kotlin-integrations-android-sdk/ 使用Ko ...

  9. Activity之概览屏幕(Overview Screen)

    概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...

  10. VisualStudio 2015 开启IIS Express可以调试X64项目

    现在项目开发时总有时需要在X64下开发,这样我们就需要IIS Express中调试.不要总是放在IIS中,在Attach这样好慢.   如果不设置直接调试X64的程序,我们有可能会受到以下类似的错误 ...