Java回调机制

什么是回调?

回调是一种双向调用模式,什么意思呢,就是说,被调用方在被调用时也会调用对方,这就叫回调。“If you call me, i will call back”。

维基百科中:在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。

<!--more-->

说到会调必须要说一说调用方式了 调用方式分为三种

  1. 同步调用
  2. 会调
  3. 异步调用

这三者有什么区别呢? 首先同步调用,同步是一种阻塞式的调用,我们一般写的方法都属于同步调用 比如:A调用B 必须要等待B执行完之后才会继续执行A。

异步调用是一种类似消息或事件的机制,解决了同步阻塞的问题 比如:A调用B后 A继续执行,B也开始执行。

回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口。

为什么使用回调?

A程序员写了一段程序a,其中预留了回调函数接口,并封装好了该程序,程序员B让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法,到这里你可能似懂非懂了,

如果你曾有过Android开发你一定知道给控件设置事件,比如OnClickListener

tvCount.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
	//需要执行的操作
    }
});

实现OnClickListener接口中的OnClick方法 在OnClick方法执行单机时的操作。 说了这么多大家应该有个初步认识了吧

如果你写方法时,你不知道调用者想干什么,就可以像Android中设置单击事件一样,当初写安卓的时候谁也不知道你单击的时候想做什么,所以就给了一个接口,你去实现这个接口里的某个方法,去完成继续的操作。

千说万说不如代码来的实在,我会根据一个例子向大家介绍如何写回调函数


一个老板去雇一个杀手,去干掉珠宝店的守卫,然后自己去偷东西,如果杀手成功,老板去偷,如果失败老板打算干掉杀手

//杀手类
public class Employee {
	//工作
	public void Work(DoWork dowork){
		if(1+1==2){//如果干掉目标给老板汇报任务完成//3
			dowork.MissionComplete();//4
			System.out.println("哈哈我成功了");//6
		}else{//如果没有干掉目标,给老板汇报任务失败
			dowork.MissionFailure()
		}
	}
	
}
interface DoWork{
	//任务成功
	void MissionComplete();
	//任务失败
	void MissionFailure();
}
public class Boss {
	public static void main(String[] args) {
		//老板雇一个杀手
		Employee employee =new Employee();//1
		//杀手去干掉目标
		employee.Work(new DoWork() {//2
			@Override
			public void MissionFailure() {
				//5
				System.out.println("干得不错,这是你的钱,哈哈我去偷东西了不被发现了");
			}
			
			@Override
			public void MissionComplete() {
				System.out.println("恭喜你已经死了........");
			}
		});
	}
	//7
}

可以根据我标注的执行顺序你就可以了解回调机制了 通过这里例子 我相信你已经知道如何去写毁掉了,希望大家生活愉快,BUG越来越少。

转载于:https://my.oschina.net/yanhaohub/blog/3065907

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值