原来一直听闻回调机制,但是也一直不理解,于是就在网上查了许多资料。在这里,简单总结。
首先回调,单从字面上来理解,即返回去调用。我的解释是不是很好理解!
再来,所谓回调就是: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方法就是常说的回调函数
说了这么多,不知道你对回调机制有没有一个大概的理解呢。