慢慢深入接触java之后,就会遇到各种深入的编程知识,比如,设计模式,比如今天要说的回调函数。
一直以来都听别人讲,这里写个回调函数,就可以了,一直没明白,到底,啥是个回调函数?
学习别人的代码,看了一上午,现在才终于弄明白,回调,到底个啥。。。
回调专业一点的说就是,传参数的时候,平时一般传普通参数就可以,而此时,你传入的是函数。
按我的理解,所谓java回调函数,就是一个类,自己通过别的类,反回来又调用自己的过程。说简单一点,就是不是直接调用自己的,自己间接调用自己的过程。
java比较特殊,没有指针,只能用接口实现。不像c,c++都有指针,传地址。
先说有关java的回调函数
网上关于,这个回调函数经典的例子,有关通俗的解释,主要有2类:
1.打电话问问题,http://blog.csdn.net/xiaanming/article/details/8703708
2.有关客户端,服务端请求过程的问题。http://blog.chinaunix.net/uid-122937-id-3807995.html
列子,讲的很详细了,非常到位,可是,你需要对比的看,才能注意到里面的细节,不然,还是不会写。
我总结了一下,java回调的整个过程,如下:
必备条件
1.有一个接口Interfere,里面有个方法,是2个类都要操作的方法。
2.有个实现的接口的,实现类A,它干什么了?
a.实现接口要求的方法(废话,等于没说)
b.注册了一个回调函数,就是明确说,类A要用类B里面的有callback参数的函数。(这个过程就注册)
3.有个中间类B,就是通过它,类A自己调用了,自己接口的方法。
a.类B要明确的声明带有callback参数的函数,里面然后回调接口的方法。
以上3点就是,java有关回调函数的总结,也许,你还没明白,里面的内容,没关系,举个例子
比如说,你在电脑前coding代码,满头大汗,你需要擦汗(相当于接口),
1.通常,我们的做法应该是,你停下来,自己拿毛巾擦汗就可以了。(相当于直接调用)。可是,事情的情况,却不是这样的。。。。
因为你太忙,或者太专注,总之,你的手离不开键盘。。。那怎么办?(间接调用)
2.那么此时,你需要回调,来完成擦汗(接口)这个过程,这时,你喊了个mm过来,说帮我擦汗(这就是申明回调函数),而且用毛巾擦汗(实现接口)。
3.你相当于类A,现在mm相当于类B,那么mm必须有擦汗的本领(回调实现接口),如果她不会(怎么可能?万一她没手,。。。),而是会说笑话,那就无法实现你的回调,那么你就没法完成擦汗这一动作了,那就悲剧了。。。
所以,看了上面,我想的这个例子,是不是有点明白为什么要有回调函数了?
再说有关js回调函数
这个相对于java就简单了很多,毕竟java和js不是一回事,根本不一样的语言。
function a(callback){
alert("我来自父函数a");
callback();
}
function b(){
alert("我来自子(回调)函数 b");
}
function c(){
alert("我来自子(回调)函数 c");
}
function test(){
a(b);
a(c);
这是无参数的,规定一个callback参数,里面再调用callback()方法,这就完成了回调。之后,就可以随意网里面加任何其他的方法了。
function e(m,n,Callback){
var d = m+n;
alert("一个从父函数e 产生的参数将要被传递给回调函数 ,这个参数是:"+d);
//这里才写你想调用的函数---参数要正确
Callback(d);
}
function callback(data){
alert("我是回调函数,我的名字叫:callback ,我接收到来自父函数的参数,参数是:"+data);
}
这个是有参数的,可以得到父函数的参数。
由于js实在是很简单,没神马好说的,看一眼就明白,回调过程,这个和它是单线程,从头往下执行有关的,不像java可以实现多线程。这种问题就不讨论了。