java回調機制
① java中什麼是介面回調
可以把使用某一介面的類創建的對象的引用賦給該介面聲明的介面變數,那麼該介面變數就可以調用被類實現的介面的方法。
實際上,當介面變數調用被類實現的介面中的方法時,就是通知相應的對象調用介面的方法,這一過程稱為對象功能的介面回調。
Java語言特點
Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特徵去掉了,這些特徵是一般程序員很少使用的。
例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載(overload)和多繼承特徵,並且不使用主文件,免去了預處理程序。因為Java沒有結構,數組和串都是對象,所以不需要指針。
② 如何理解java中回調機制和模板機制
即回調就是體現在你的同學又反過來撥打你的號碼。 拿這個例子類比Ajax中的回調機制以及Spring中HibernateTemplate用到的回調+模板機制,可以更容易地理解回調機制。 Ajax代碼:Java代碼 functiontest{if(window.ActiveXObject){xmlHttp=newActiveXObject( Microsoft.XMLHTTP);}elseif(window.XMLHttpRequest){xmlHttp=newXMLHttpRequest();}xmlHttp.onreadystatechange=callback; xmlHttp.open(…); xmlHttp.send(null);} functioncallback{} 其中xmlHttp.onreadystatechange = callback 就是表示在state改變時調用callback函數,而這個callback就是一個回調函數。類比:xmlHttp發出請求就相當於你打電話給你的同學,xmlHttp不知道state何時發生變化,就相當於你不知道你的同學何時能解決問題。Callback函數就相當於你的電話號碼, state發生變化時會調用callback函數,同樣你的同學解決問題後會打電話通知你。 Spring中HibernateTemplate的回調機制與模板方法 HibernateTemplaet的源碼很復雜,我們可以寫一段簡單的代碼來模擬一下:Java代碼interfaceCallBack{publicvoiddoCRUD();}publicclassHibernateTemplate{publicvoidexecute(CallBackaction){ getConnection(); action.doCRUD(); releaseConnection();}publicvoidadd(){execute(newCallBack(){publicvoiddoCRUD(){System.out.println( 執行add操作...);}});}publicvoiddelete(){execute(newCallBack(){publicvoiddoCRUD(){System.out.println( 執行delete操作...);}});}publicvoidgetConnection(){ System.out.println( 獲得連接...);}publicvoidreleaseConnection(){ 釋放連接...);}}類比:execute方法可以體現出模板模式。以add方法為例,調用execute方法就相當於你打電話給你的同學,但是你的同學說需要時間,就像execute方法需要首先獲得連接一樣,於是你把CallBack匿名類傳遞給它,在它獲得連接之後會執行你的add操作,這就相當於你把電話號碼告訴你的同學,他解決問題之後再打給你一樣。
③ java回調的作用
這篇的例子已經非常簡潔了,實在是不需要加註釋了。
你直接把問題提出來吧。
補充點東西吧:一般來說類的成員變數一般都是數據對象,主要是用來傳遞數據用的。而回調的意思是把一段程序作為成員變數,在特定的場合使用該段程序。這就是回調的核心。
④ java構造器是不是就是構造函數,還有回調機制是什麼東西
構造器就是構造函數,也叫構造方法。
回調機制需要一個調用者(一個函數或方法),一個回調函數,還有一個觸發條件。首先要把回調函數注冊到調用者所在的類中,程序在執行的時候首先執行調用者,當調用者執行完成或滿足某個條件的時候會去調用回調函數。ajax使用的就是回調機制.
⑤ JAVA裡面方法回調是什麼意思
註明:此答案為轉載,出處:網路知道
====================================
比如你寫了兩個類A和B,並且各生成一個對應的實例a 和b ,在a 中有一個方法fa( 此方法只負責生成兩個隨機數)要調用b中的一個方法fb(此方法對兩個數進行求各) 來進行求和,fb求得結果後要調用a的另一個方法ffa(此方法用於顯示求得的結果),這時ffa就叫作回調函數,(反回來調用一下的意思)
為什麼要這么麻煩呢,如果fb直接返回結果不好嗎,試想如果fb執行時間較長,那麼fa就會一直等結果而導致fa不往下執行了,此時如果用回調這個功能實現,由於 回調函數一般是由系統非同步調用的,方法fa調用fb後就不用等而直接往下執行,比如可以再生成兩隨機數給fb,fb會依次得到結果後通過回調機制來調用ffa顯示出來,其實就是為實現生成隨機數和計算隨機數的非同步執行。好象fa和fb是兩個獨立執行的線程,提高程序效率。
非同步調用是回調函數的一種典型應用
正是因為回調函數大多數情況下(98%的比例)最常用於非同步的多線程程序中,所以大家經常認為只要用到回調函數了則程序就是非同步的.這個理解不對
fa ,fb方法分別運行於兩個線程中才能實現非同步工作,因為回調函數只是實現非同步調用的手段, 線程間通信(比如要進行線程間同步)時程序員常通過在一個線程中引發事件來通知另一線程響應,而引發事件其實就是一種調用回調函數的過程.由此可以理解VB的事件編程模式下我們寫的那些按鈕點擊事件中的代碼其實就是回調函數的實現代碼
⑥ 請問JAVA中介面中自動回調方法的原理是什麼
那就是繼承,你實現了一個介面就是這個介面的子類了,當然就可以調用了。子類自動繼承父類的方法,但是介面的方法是抽象的你必須要實現,所有可以確保你實現這個介面就必須有這個介面的方法了。而且子類變父類是可以直接用的,所以就可以自動調用了。
最好的方式就是去看下源代碼,你就完全明白這種機制了。然後自己可以寫個小例子比如:監聽Vector只要加入了新元素就發個消息的。
⑦ Java回調以及如何獲取線程的執行結果
軟體模塊之間存在調用的介面,從調用方式來看,有同步調用、回調、非同步調用這三種方式:
同步調用是是一種阻塞式調用,調用方要等待被調用方執行完畢返回後才能獲取調用的執行結果,是一種單向調用。
回調是一種雙向調用,調用方在執行被調用方後,被調用方會調用被調用方的介面;
非同步調用是一種類似消息或者事件的機制,介面在收到某個消息或發生某事件時,會主動通知客戶方,通常使用回調來實現非同步調用。
Java回調的必須要素:
1.僱主類必須有可以被觀察者調用的方法A;
2.觀察者必須持有可以調用A的對象的引用。
在實際工作中,我們通常將方法A以interface或者內部類的形式來實現,然後把包含有A的類的對象引用傳遞到觀察者中。
Java中的線程的返回值是void,並且是一個非同步執行流,所以我們沒有直接的方法來獲取線程執行後的結果,即不能直接知道線程何時結束,以及合適去獲取線程執行任務後的結果。由於回調的存在,我們可以在線程中以回調的方式通知線程的調用者線程的結束時間,並可以將任務的結果通過回調回送到調用者中。
⑧ JAVA中 介面是什麼 介面的回調是什麼
Java介面是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
兩種含義:一,Java介面,Java語言中存在的結構,有特定的語法和結構;二,一個類所具有的方法的特徵集合,是一種邏輯上的抽象。前者叫做「Java介面」,後者叫做「介面」。
介面回調是指:可以把使用某一介面的類創建的對象的引用賦給該介面聲明的介面變數,那麼該介面變數就可以調用被類實現的介面的方法。實際上,當介面變數調用被類實現的介面中的方法時,就是通知相應的對象調用介面的方法,這一過程稱為對象功能的介面回調。看下面示例。interface People{ void peopleList();}class Student implements People{ public void peopleList(){ System.out.println("I』m a student.");}}class Teacher implements People{ public void peopleList(){ System.out.println("I』m a teacher.");}}public class Example{ public static void main(String args[]){ People a; //聲明介面變數a=new Student(); //實例化,介面變數中存放對象的引用a.peopleList(); //介面回調a=new Teacher(); //實例化,介面變數中存放對象的引用a.peopleList(); //介面回調}}結果:I』m a student.I』m a teacher.再來看看向上轉型(upcasting)的概念。
用 Java 介面實現回調函數的等價功能熟悉 MS-Windows 和 X Window System 事件驅動編程模型的開發人員,習慣於傳遞在某種事件發生時調用(即「回調」)的函數指針。Java 的面向對象模型目前並不支持方法指針,Java 的介面支持提供了一種獲得回調的等價功能的機制。其技巧就是:定義一個簡單介面,並在該介面中聲明我們要調用的方法。假定我們希望在某個事件發生時得到通知。我們可以定義一個介面:InterestingEvent.javapackage org.zj.sample;public interface InterestingEvent { public void interestingEvent ();}這使得我們可以控制實現該介面的類的任何對象。因此,我們不必關心任何外部類型信息。發出事件信號的類必須等待實現了 InterestingEvent 介面的對象,並在適當時候調用 interestingEvent() 方法。EventNotifier.javapackage org.zj.sample;public class EventNotifier { private InterestingEvent ie; private boolean somethingHappened; public EventNotifier(InterestingEvent event) { ie = event; // 保存事件對象以備後用。 somethingHappened = false; // 還沒有要報告的事件。 } public void doWork() { if (somethingHappened) { // 檢查設置的謂詞。 ie.interestingEvent();// 通過調用介面的這個方法發出事件信號。 } } public void setHappened(){//設置謂詞。 somethingHappened=true; }}在上例中,使用 somethingHappened 謂詞來跟蹤是否應觸發事件。希望接收事件通知的代碼必須實現 InterestingEvent 介面,並將自身引用傳遞給事件通知程序。CallMe.javapackage org.zj.sample;public class CallMe implements InterestingEvent { @SuppressWarnings("unused") private EventNotifier en; public CallMe() { // 注意 EventNotifier (InterestingEvent event),應該傳遞一個介面類型。 // 而下面將this,即實現了InterestingEvent介面的CallMe實例傳遞給//EventNotifier。也就是所謂的介面回調了。 en = new EventNotifier(this); // 創建事件通知程序,並將自身引用傳遞給它。 } // 為事件定義實際的處理程序。
⑨ java中回調函數怎麼實現,和windows機制下有何區別
回調函數一般用在非即時類方法調用
比如我調用一個方法,這個方法由於處理時間不定長,所以沒有等待機制,直接返回,然後在處理完成以後需要通知調用該方法的地方繼續執行,就存在了回調方法。