日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java回调函数使用

發布時間:2025/3/15 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中,通常就是編寫另外一個類或類庫的人(李四)規定一個接口,然后你(張三)來實現這個接口,然后把這個實現類的一個對象作為參數傳給別人的程序,別人的程序必要時就會通過那個接口來調用你編寫的函數。

????使用技巧:定一個接口,在接口中聲明我們想調用的方法。

??????????????????? 在另一個方法中注冊剛定義的回調接口

第一步:定義回調接口
package?com.callback; /** ?* @since 2012-02-02 ?* @desc 定義回調接口 ?*/ public?interface?CallBackInterface { ????public?void?doSome();? ????? ????public?void?exectueMethod(); }
第二步:李四編寫的程序
package?com.callback; /** ?* @since 2012-02-02 ?* @desc 李四 ?*/ public?class?MethodB { ????public?double?getTime(CallBackInterface callBack) { ????????long?start = System.currentTimeMillis(); ????????callBack.exectueMethod(); ????????long?end = System.currentTimeMillis(); ????????System.out.println("cost time="?+ (end - start)); ????????return?end - start; ????} }

  第三步:張三實現李四規定的接口

package?com.callback; /** ?* @since 2012-02-02 ?* @desc 張三 ?*/ public?class?MethodA { ????public?static?void?main(String args[]){ ????????MethodB b=new?MethodB(); ????????//返回值d只和MethodB有關,和接口中方法的返回值無關 ????????double?d=b.getTime(new?CallBackInterface() { ????????????? ????????????//張三實現了李四定義的接口 ????????????public?void?exectueMethod() { ????????????????new?MethodA().testMethod(); ????????????} ????????????? ????????????@Override ????????????public?void?doSome() { ????????????????? ????????????} ????????}); ????????System.out.println("d="+d); ????} ????? ????public?void?testMethod(){ ????????for(int?i=0;i<10000;i++){ ????????????System.out.print(""); ????????} ????} }

  輸出結果:

cost time=31
d=31.0

理解“回調函數”?

所謂回調,就是客戶程序CLIENT調用服務程序SERVER中的某個函數SA,然后SERVER又在某個時候反過來調用CLIENT中的某個函數CB,對于CLIENT來說,這個CB便叫做回調函數。例如Win32下的窗口過程函數就是一個典型的回調函數。?
一般說來,CLIENT不會自己調用CB,CLIENT提供CB的目的就是讓SERVER來調用它,而且是CLIENT不得不提供。由于SERVER并不知道CLIENT提供的CB叫甚名誰,所以SERVER會約定CB的接口規范(函數原型),然后由CLIENT提前通過SERVER的一個函數R告訴SERVER自己將要使用CB函數,這個過程稱為回調函數的注冊,R稱為注冊函數。Web SERVERerviCliente以及Java的RMI都用到回調機制,可以訪問遠程服務器程序。?

下面舉個通俗的例子:?
某天,我打電話向你請教問題,當然是個難題,:),你一時想不出解決方法,我又不能拿著電話在那里傻等,于是我們約定:等你想出辦法后打手機通知我,這樣,我就掛掉電話辦其它事情去了。過了XX分鐘,我的手機響了,你興高采烈的說問題已經搞定,應該如此這般處理。故事到此結束。這個例子說明了“異步+回調”的編程模式。其中,你后來打手機告訴我結果便是一個“回調”過程;我的手機號碼必須在以前告訴你,這便是注冊回調函數;我的手機號碼應該有效并且手機能夠接收到你的呼叫,這是回調函數必須符合接口規范。?
通過上面個人感覺到回調函數更多的應用就是結合異步。比如:ajax中jServer通過組件和服務器的異步通信。?

什么是回調函數?

精妙比喻:回調函數還真有點像您隨身帶的BP機:告訴別人號碼,在它有事情時Call您?
回調用于層間協作,上層將本層函數安裝在下層,這個函數就是回調,而下層在一定條件下觸發回調,例如作為一個驅動,是一個底層,他在收到一個數據時,除了完成本層的處理工作外,還將進行回調,將這個數據交給上層應用層來做進一步處理,這在分層的數據通信中很普遍。?
其實回調和API非常接近,他們的共性都是跨層調用的函數。但區別是API是低層提供給高層的調用,一般這個函數對高層都是已知的;而回調正好相反,他是高層提供給底層的調用,對于低層他是未知的,必須由高層進行安裝,這個安裝函數其實就是一個低層提供的API,安裝后低層不知道這個回調的名字,但它通過一個函數指針來保存這個回調,在需要調用時,只需引用這個函數指針和相關的參數指針。

其實:回調就是該函數寫在高層,低層通過一個函數指針保存這個函數,在某個事件的觸發下,低層通過該函數指針調用高層那個函數。 【參考】 http://blog.csdn.net/sweetwxh/article/details/2067139 http://liutiemeng.blog.51cto.com/120361/18874 http://kidult.iteye.com/blog/148982

轉載于:https://www.cnblogs.com/hmyprograming/archive/2012/09/26/2704669.html

總結

以上是生活随笔為你收集整理的Java回调函数使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91爱爱影院 | 在线视频免费观看 | 免费色站 | 国产免费成人av | 手机在线小视频 | 裸体按摩www性xxxcom | 香蕉在线看 | 尤物一区 | 久久久久成人精品 | 欧美另类精品 | 日本丰满少妇做爰爽爽 | 亚洲精品国产乱伦 | 欧美日韩午夜激情 | 亚洲成人偷拍 | 国产精品日日夜夜 | 欧美多人猛交狂配 | 国产高清无密码一区二区三区 | 亚洲综合色吧 | 亚洲影院在线观看 | 疯狂做受xxxx高潮人妖 | 91婷婷在线| 中国人妖和人妖做爰 | 亚洲成av人片在线观看无 | 成人av网址在线 | 国产三级按摩推拿按摩 | 骚av在线 | 黄色一级免费 | 亚洲成人自拍偷拍 | 欧美日韩在线视频免费播放 | 男人的天堂a在线 | 一区二区三区黄 | 奇米影视777在线观看 | 致命弯道8在线观看免费高清完整 | 成人高清网站 | www.黄色一片 | 日本免费高清 | 91视频免费播放 | 国产福利影院 | 极品尤物一区二区 | 青青艹在线观看 | 91禁在线动漫 | 国产视频第一区 | a国产免费| 亚洲国内自拍 | 午夜福利理论片在线观看 | 丰满少妇理论片 | 精品国产人妻一区二区三区 | 涩视频在线观看 | 五月婷婷婷 | 国产做爰xxxⅹ性视频国 | 屁屁影院一区二区三区 | 国产睡熟迷奷系列精品视频 | 久久偷看各类wc女厕嘘嘘偷窃 | 亚洲毛片在线播放 | 男女午夜视频 | 污污视频在线 | 成人动漫一区二区 | 亚洲精品乱码久久久久久 | 午夜爱爱网 | 神马影院午夜伦理 | 亚洲欧美日韩一区二区 | 亚洲一区二区在线免费观看 | 欧美一区二区三区免费 | 国产尻逼| 人妻av一区二区三区 | 99精品在线视频观看 | 国产福利在线播放 | 国产精品久久久久久无人区 | 中文字幕人成人乱码亚洲电影 | 极品美女销魂一区二区三区 | 精品久久久久久久久久久久久久久久 | 亚洲毛片一区二区 | 蜜桃视频在线观看一区 | 欧美成人不卡视频 | 可以直接观看的av | 久久精品久久国产 | 国产区91 | 99精品欧美一区二区 | 国产第一色 | 亚洲国产精品国自产拍久久 | 精品人妻一区二区三区浪潮在线 | 五月天婷婷综合网 | 国产深喉视频一区二区 | 日本不卡一区二区三区在线观看 | 日韩亚洲区| 国产高清免费在线观看 | hd性videos意大利精品 | 中文字幕免费观看视频 | 日韩Av无码精品 | a级黄色小说 | 奇米影视在线 | 国产又粗又猛又爽又黄的视频小说 | 999久久久精品 | 久久精品69| 日本中文字幕高清 | 日韩精品电影一区二区三区 | 日韩丰满少妇 | 久久久国产一区 | 奇米影视77777 |