1、回調函數的定義
簡而言之,回調函數就是使得內部函數(一般是庫函數)可以調用外部函數(自定義函數)的過程。
2、C/C++下的回調函數
在C/C++語言中,指針是一個用來指向內存地址的變量。當程序運行時,所有與運行有關的對象都要加載到內存中,即與程序任何有關的任何對象都可以通過指針指向它。函數是存放在內存代碼區域中,即可以通過指針來存取函數,把指向函數入口的指針稱之爲函數指針。
回調函數,即使用者自己定義一個函數並實現函數的功能,然後將這個函數作爲參數傳入到別人的函數中,但由別人在運行期間通過參數傳遞的方式調用。
帶參的回調函數代碼實例
//定義帶參回調函數
void PrintfText(char* s)
{
printf(s);
}
//定義實現帶參回調函數的"調用函數"
void CallPrintfText(void (*callfuct)(char*),char* s)
{
callfuct(s);
}
//在main函數中實現帶參的函數回調
int main(int argc,char* argv[])
{
CallPrintfText(PrintfText,"Hello World!\n");
return 0;
}
3、Java下的回調函數
Java語言中不存在指針機制,無法通過函數指針的方式實現回調函數。Java支持Interface,通過Interface可以實現相同的回調,通過定義一個簡單的interface,聲明一個被希望回調的方法。
介紹經典的回調方式:
(1)調用類Caller實現接口CallBack;
(2)調用類Caller中有一個被調用類Callee的引用caller;
(3)被調用類Callee中有一個參數爲callback的方法getMessage(CallBack callback);
(4)Caller的對象caller調用B的方法getMessage(CallBack callback)--類Caller調用類Callee的方法getMessage();
(5)對象callee可以在getMessage()方法中調用類Caller中的方法message();--類Callee中調用類Caller中的方法meissage();
示例代碼
//回調接口
public interface CallBack {
public void message();
}
public class Caller implements CallBack {
//調用者caller中被調用者的引用
private Callee callee;
//構造函數
public Caller(Callee callee) {
this.callee = callee;
}
public Callee getCallee() {
return callee;
}
public void setCallee(Callee callee) {
this.callee = callee;
}
@Override
public void message() {
// TODO Auto-generated method stub
System.out.println("回調完成");
}
}
public class Callee {
//被調用者函數中需要有callback參數的方法
public void getMessage(CallBack callBack) {
callBack.message();
}
}
public class test {
public static void main(String[] args) {
//
Callee callee = new Callee();
//實現callback接口的調用者caller
Caller caller = new Caller(callee);
caller.getCallee().getMessage(caller);
}
}
以上是本人對回調機制的一點拙見,如有錯誤希望指出!多謝!