初识Java回调机制
2016-07-28 14:40
417 查看
原来一直听闻回调机制,但是也一直不理解,于是就在网上查了许多资料。在这里,简单总结。
首先回调,单从字面上来理解,即返回去调用。我的解释是不是很好理解!
再来,所谓回调就是:A类中调用B类中的方法C,然后B类中反过来调用A类中的方法D,D这个方法就是回调方法。不要晕,我们一步一步来……
下面,举个栗子:
1.老师在黑板上出了道“1+1”的计算题,让小明来填,这么简单的题,小明直接心算就出来了。
模拟代码如下:
测试代码:
运行结果是:心算结果是a+b=2
2.下来,老师有出了道“166+122”的计算题,让小明算,然后去办公室批改作业。小明一脸蒙逼,不会啊。。。。。怎么办,在线急。这时,小李子跑过来嘲笑的看了他一眼,朝他扔了一个计算器。模拟代码如下:
测试代码如下:
运行结果如下:使用计算器的结果是a+b=288
现在这个过程仍没有涉及回调机制,但小明的部分工作已经转移。
3.老师来检查发现,小明又算对了,觉得这娃不错。于是又出了道“2323232+2323232”,回办公室了。小明欲哭无泪,这下惨了,小卖部的辣条要卖完了。此时,他的目光朝向小李子呵呵一笑,只要小李子帮他完成,他就送他一包辣条。小李子经不住诱惑就答应了。
模拟代码如下:
小明直接使用使用一个方法寻求帮助
测试代码如下:
运行结果是:求助小李结果是a+b=4646464
执行流程是:小明通过callHelp方法调用了小李子(new SuperCalculator())的add方法,在调用的时候将自身的引用传入,小李子在用计算器算出结果后,回调了小明的fillBankfang方法,把结果写在黑板上。
这里的fillBlankfang方法就是常说的回调函数
说了这么多,不知道你对回调机制有没有一个大概的理解呢。
首先回调,单从字面上来理解,即返回去调用。我的解释是不是很好理解!
再来,所谓回调就是:A类中调用B类中的方法C,然后B类中反过来调用A类中的方法D,D这个方法就是回调方法。不要晕,我们一步一步来……
下面,举个栗子:
1.老师在黑板上出了道“1+1”的计算题,让小明来填,这么简单的题,小明直接心算就出来了。
模拟代码如下:
public class Student { private String name = null; public Student(String name) { super(); this.name = name; } public void setName(String name) { this.name = name; } private int Add(int a,int b){ return a+b; } public void fillBank(int a,int b){ int result = Add(a,b); System.out.println("心算结果是"+"a"+"+"+"b"+"=" + result); } }
测试代码:
public class Test1 { public static void main(String[] args) { int a = 1; int b = 1; Student s = new Student("小明"); s.fillBank(a, b); } }
运行结果是:心算结果是a+b=2
2.下来,老师有出了道“166+122”的计算题,让小明算,然后去办公室批改作业。小明一脸蒙逼,不会啊。。。。。怎么办,在线急。这时,小李子跑过来嘲笑的看了他一眼,朝他扔了一个计算器。模拟代码如下:
//计算器 public class Calculator { public int add(int a ,int b){ return a + b; } } public class Student { private String name = null; public Student(String name) { super(); this.name = name; } public void setName(String name) { this.name = name; } private int Add(int a,int b){ return a+b; } public void fillBank(int a,int b){ int result = Add(a,b); System.out.println("使用计算器的结果是"+"a"+"+"+"b"+"=" + result); } }
测试代码如下:
public class Test2 { public static void main(String[] args) { int a = 166; int b = 122; Student s = new Student("小明"); s.fillBank(a, b); } }
运行结果如下:使用计算器的结果是a+b=288
现在这个过程仍没有涉及回调机制,但小明的部分工作已经转移。
3.老师来检查发现,小明又算对了,觉得这娃不错。于是又出了道“2323232+2323232”,回办公室了。小明欲哭无泪,这下惨了,小卖部的辣条要卖完了。此时,他的目光朝向小李子呵呵一笑,只要小李子帮他完成,他就送他一包辣条。小李子经不住诱惑就答应了。
模拟代码如下:
//超级计算机(将计算器和小李子看成一个整体) public class SuperCalculator { public void add(int a, int b,Student xiaoming){ int result = a+b; xiaoming.fillBank(a, b,result); }9 }
小明直接使用使用一个方法寻求帮助
public class Student { private String name = null; public Student(String name) { super(); this.name = name; } public void setName(String name) { this.name = name; } public void callHelp(int a , int b){ new SuperCalculator().add(a, b, this); } public void fillBank(int a,int b,int result){ System.out.println("求助小李结果是"+"a"+"+"+"b"+"=" + result); } }
测试代码如下:
public static void main(String[] args) { int a=2323232; int b=2323232; Student s = new Student("小明"); s.callHelp(a, b); }
运行结果是:求助小李结果是a+b=4646464
执行流程是:小明通过callHelp方法调用了小李子(new SuperCalculator())的add方法,在调用的时候将自身的引用传入,小李子在用计算器算出结果后,回调了小明的fillBankfang方法,把结果写在黑板上。
这里的fillBlankfang方法就是常说的回调函数
说了这么多,不知道你对回调机制有没有一个大概的理解呢。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序