您的位置:首页 > 编程语言 > Java开发

初识Java回调机制

2016-07-28 14:40 417 查看
原来一直听闻回调机制,但是也一直不理解,于是就在网上查了许多资料。在这里,简单总结。

首先回调,单从字面上来理解,即返回去调用。我的解释是不是很好理解!

再来,所谓回调就是: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