java中回调的理解

java中不同模块之间相互调用分为三种,同步调用,异步调用,回调

以老师提问学生问题举例

1.同步调用是最常见的,就是类A中的方法执行中国调用类B的方法,知道类B中的方法执行完成后,类A继续执行。

就相当于 老师提问学生问题,等学生回答完成以后,老师继续做其他事情,老师并不知道学生问题的答案。

2.异步调用,还是类A中的方法调用类B中的方法,但是在这个类B方法上新建一个线程,类A中的方法继续执行其他语句。

就相当于老师提问学生问题,学生在回答的过程中,并不影响老师做其他事情。

3.回调,类A中的方法调用类B的方法,同时,将类A的对象作为参数传递给类B方法,这样,类B的方法在执行的过程中,就可以在调用类A中的方法,这样,就形成了回调。回调指的就是类A调用类B中的方法,但是类B又反过来调用类A中的方法。这个模式能够实现的核心就是当类A调用类B的方法的同时,将类A的对象作为参数传递给了被调用者。

就相当于,老师提问学生问题,学生在回答问题的过程中,让老师给一点提示,让后学生继续作答。

我的理解就感觉回调就是互调的感觉,我问A借钱,B让给先去搬回砖,我搬完后,B把钱借给我,然后我又去做自己的事情了。

接口回调就是对回调的升级,是在回调的基础上加了多态。

举例,老师提问学生问题,把对象传给了学生,学生之所以能够接收老师这个对象,因为学生这个的方法中的参数为老师类,如果把老师类中的问问题这个方法抽象成一个接口,学生回答问题的方法的参数为这个接口,那么不仅仅是老师可以问学生问题了,任何实现这个接口的人都可以问学生问题。

这样说可能有点绕,下面,我用代码的方式让大家理解接口回调。

//首先我需要一个问问题的接口,其中有问问题的方法,因为需求是问学生问题,所以我们这里的参数是学生对象

public iterfance AskQuestion(){

void ask(Student s);

}

//定义一个老师类,实现这个问问题的接口

public class Teacher implements AskQuestion(){

//老师问问题的方法

public void ask (Student student){

student.answer(this);//在this这里变实现了回调

//老师解释的方法

public void explain(){

System.out.println("老师给学生解释问题");

//定义一个学生类,他有回答问题的方法

public class Student{

public class answer(AskQuestion Person){

System.out.println("我回答不出来,想请老师帮忙");

person.explain();//此处实现了回调。

System.out.println("经过老师的帮忙,我解决了问题");

//新建一个测试类

pubic class Test{

public static  void  main(String[] args){

Student s = new Student();

Teacher t = new Teacher();

t.ask(s);

}

}

//打印结果

我回答不出来,想请老师帮忙

老师给学生解释问题

经过老师的帮忙,我解决了问题


总结:

以上便是我对接口回调的理解,接口回调的本质就是调用者将自己的对象传给被调用者,被调用者化被动为主动,反过来调用之前调用他的人。

在学习过程中,文件过滤器以及动态代理都使用了回调的思想。

文件过滤器:列出文件的方法需要一个过滤器进行过滤,而过滤器又需要文件对象进行判断,这样就形成了回调

动态代理:super.h.invoke(this, m5, new Object[]{var1});,这里代理对象的方法找那个执行了处理器调用对象的invoke方法,invoke方法中传递了代理人对象this,在进行动态代理的时候可以使用被代理人的this进行一些操作。




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值