導航:首頁 > 編程語言 > java怎麼寫回調函數

java怎麼寫回調函數

發布時間:2023-06-10 12:07:06

Ⅰ 在java里 什麼是回調函數啊.

C語言中回調函數解釋:
回調函數(Callback Function)是怎樣一種函數呢?
函數是用來被調用的,我們調用函數的方法有兩種:
l 直接調用:在函數A的函數體里通過書寫函數B的函數名來調用之,使內存中對應函數B的代碼得以執行。這里,A稱為「主叫函數」(Caller),B稱為「被叫函數」(Callee)。
l 間接調用:在函數A的函數體里並不出現函數B的函數名,而是使用指向函數B的函數指針p來使內存中屬於函數B的代碼片斷得以執行——聽起來很酷,是吧。
比起直接調用來,間接調用的確麻煩,那為什麼還要使用間接調用呢?原因很簡單——直接調用把函數名都寫進函數體了,經過編譯器那麼一編譯,板上釘釘,A註定調用的是B了,這樣的程序只能按照程序員事先設計好的流程執行下去,太呆板了。此時,間接調用的巨大靈活性就顯現出來了。想一想,如果p是函數A的一個參數(參數是變數,是變數就可以變嗎!),那麼程序的最終用戶完全可以通過操作來改變p的指向——這樣,A在通過p調用函數的時候就有機會調用到不同的函數,這樣程序的實用性和擴展性就強多了。
在WINDOWS中,程序員想讓系統DLL調用自己編寫的一個方法,於是利用DLL當中回調函數(CALLBACK)的介面來編寫程序,使它調用,這個就稱為回調。在調用介面時,需要嚴格的按照定義的參數和方法調用,並且需要處理函數的非同步,否則會導致程序的崩潰。這樣的解釋似乎還是比較難懂,這里舉個簡單的例子,程序員A寫了一段程序(程序a),其中預留有回調函數介面,並封裝好了該程序。程序員B要讓a調用自己的程序b中的一個方法,於是,他通過a中的介面回調自己b中的方法。目的達到。在C/C++中,要用回調函數,被掉函數需要告訴調用者自己的指針地址,但在JAVA中沒有指針,怎麼辦?我們可以通過介面(interface)來實現定義回調函數。
正常情況下開發人員使用已經定義好的API,這個過程叫Call。但是有時這樣不能滿足需求,就需要程序員注冊自己的程序,然後讓事先定義好多API在合適的時候調用注冊的方法,這叫CallBack。
「通常大家說的回調函數一般就是按照別人(李四)的定好的介面規范寫,等待別人(張三)調用的函數,在C語言中,回調函數通常通過函數指針來傳遞;在Java中,通常就是編寫另外一個類或類庫的人(李四)規定一個介面,然後你(張三)來實現這個介面,然後把這個實現類的一個對象作為參數傳給別人的程序,別人的程序必要時就會通過那個介面來調用你編寫的函數。」

Ⅱ JAVA 匿名內部類和回調函數

new Inner()後面的一對花括弧,表示的是匿名內部類,此類的父類顯然是Object,實現介面Inner。
Inner是介面,介面和抽象類都是不能直接實例化的,也就是說
Inner in = new Inner();這樣寫是不能通過編譯的,不過java的語法支持就地使用一個匿名類來實現所有的抽象方法(介面的所有方法聲明和抽象類的所有抽象方法)

Ⅲ 請問什麼叫java中的回調函數

回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數版傳遞給另一個函權數,當這個指針被用為調用它所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。

Ⅳ java怎麼實現c的回調函數

以我的理解恐怕這個CALLBACK要讓你失望了~~JAVA的操作機制是隱藏了指針和引用,地址的操作在JAVA裡面是不允許的~~所以JNI介面中定義的方法,不能使用函數指針作為形參,所以這個回調函數在JAVA的CLASS中是不能調用的;
你換個思考角度用TCP/UDP程序吧,JAVA的CLASS調用的結果通過流傳遞給C/C++的Server。。。貌似我只能想到這樣了。
望採納!!

Ⅳ java用jna調用C語言dll介面中的回調函數怎麼寫

簡單的你會寫,那就好辦,直接上代碼

{

{
/**
*登錄回調
*/
voidinvoke(StringuserId,longretCode,StringretMsg);
}

/**
*注冊一個登錄回調方法.此方法是dll提供的
*/
voidRegisterLoginReply(LoginReplyloginReply);

}

/**
*實現登錄回調方法
*/
.LoginReply{
@Override
publicvoidinvoke(StringuserId,longretCode,StringretMsg){
log.info("登錄回調方法:{},{},{}",userId,retCode,retMsg);
}
}

//設置登錄回調
api.RegisterLoginReply(loginReplyCallBack);

Ⅵ java中怎麼使用callback函數

在很多場景,作為開發都會想到,在執行完畢一個任務的時候,能執行一個callback函數是多麼好的事情。
現在模擬一下這個情景:
定義三個類。分別是主函數類。callback函數的介面類。業務處理類。在業務處理類中,處理完業務之後,執行一個callback函數。
[java] view plain
package comz;

public class Main {
public static void main(String[] args) {
new TestCallBack().compute(1000, new ComputeCallBack() {

@Override
public void onComputeEnd() {
System.out.println("end back!!!");

}
});
}
}
這是主函數類。new了一個業務處理類來處理邏輯,並在處理完畢之後,執行callback函數。
[java] view plain
package comz;

public class TestCallBack {

public void compute(int n, ComputeCallBack callback) {
for (int i = 0; i < n; i++) {
System.out.println(i);
}
callback.onComputeEnd();
}
}
這是業務處理類。僅僅輸出一些數字,然後執行回調函數。
[java] view plain
package comz;

public interface ComputeCallBack {
public void onComputeEnd();
}
這是回調函數的介面。
--------------------------------------
運行上面的代碼,就會在輸出結束的時候調用在Main裡面的callback函數,輸出System.out.println("end back!!!");
--------------------------------------
這里的原理是:
在主類中,新建業務類的時候,傳遞進去的第二個參數是一個實現了回調介面的匿名類對象。
在業務類中,我們調用了這個對象的onComputeEnd方法。在執行onComputeEnd的時候,jvm會找到這個對象的函數實現並調用。於是就輸出了end back!!!

閱讀全文

與java怎麼寫回調函數相關的資料

熱點內容
dede工具 瀏覽:507
5g網盟app怎麼下載 瀏覽:486
微信備份老是連接中斷 瀏覽:886
出台多少份文件 瀏覽:380
鞋子怎麼搭配衣服的app 瀏覽:755
文件名使用的通配符的符號是什麼 瀏覽:916
lol分卷文件損壞怎麼辦 瀏覽:276
6分管車螺紋怎麼編程 瀏覽:732
海口農商銀行信用卡app是什麼 瀏覽:770
win10任務欄文件夾我的電腦 瀏覽:14
安卓nba2k18 瀏覽:776
文件夾密碼怎麼修改密碼 瀏覽:271
蘋果數據中心用什麼伺服器 瀏覽:769
省內圓通快遞寄文件夾需要多少錢 瀏覽:740
iphone程序加密 瀏覽:884
win10文件夾調整文件行高 瀏覽:681
創意手繪教程 瀏覽:754
微信刪除帳號信息 瀏覽:596
mysql操作類文件 瀏覽:649
繞過xp密碼 瀏覽:158

友情鏈接