java回調函數有什麼用
『壹』 請問java里的回調函數是什麼意思
回調函數一般只是供系統調用的,程序員一般很少調用或者修改
『貳』 JAVA裡面方法回調是什麼意思
所謂回調,就是客戶程序C調用服務程序S中的某個函數A,然後S又在某個時候反過來調用C中的某個函數B,對於C來說,這個B便叫做回調函數。例如Win32下的窗口過程函數就是一個典型的回調函數。一般說來,C不會自己調用B,C提供B的目的就是讓S來調用它,而且是C不得不提供。由於S並不知道C提供的B姓甚名誰,所以S會約定B的介面規范(函數原型),然後由C提前通過S的一個函數R告訴S自己將要使用B函數,這個過程稱為回調函數的注冊,R稱為注冊函數。Web Service以及Java的RMI都用到回調機制,可以訪問遠程伺服器程序。
下面舉個通俗的例子:
某天,我打電話向你請教問題,當然是個難題,^_^,你一時想不出解決方法,我又不能拿著電話在那裡傻等,於是我們約定:等你想出辦法後打手機通知我,這樣,我就掛掉電話辦其它事情去了。過了XX分鍾,我的手機響了,你興高采烈的說問題已經搞定,應該如此這般處理。故事到此結束。這個例子說明了「非同步+回調」的編程模式。其中,你後來打手機告訴我結果便是一個「回調」過程;我的手機號碼必須在以前告訴你,這便是注冊回調函數;我的手機號碼應該有效並且手機能夠接收到你的呼叫,這是回調函數必須符合介面規范。
通過上面個人感覺到回調更多的應用就是結合非同步。比如:Ajax中js通過組件和伺服器的非同步通信。
『叄』 怎樣理解java中的回調函數
程序員寫了一段程序(程序a),其中預留有回調函數介面,並封裝好了該程序。程序員B要讓a調用自己的程序b中的一個方法,於是,他通過a中的介面回調自己b中的方法。目的達到。在C/C++中,要用回調函數,被掉函數需要告訴調用者自己的指針地址,但在JAVA中沒有指針,怎麼辦?我們可以通過介面(interface)來實現定義回調函數。
假設我是程序員A,以下是我的程序a:
[java] view plainprint?
public class Caller
{
public MyCallInterface mc;
public void setCallfuc(MyCallInterface mc)
{
this.mc= mc;
}
public void call(){
this.mc.method();
}
}
還需要定義一個介面,以便程序員B根據我的定義編寫程序實現介面。
public interface MyCallInterface
{
public void method();
}
於是,程序員B只需要實現這個介面就能達到回調的目的了:
public class B implements MyCallInterface
{
public void method()
{
System.out.println("回調");
}
public static void main(String args[])
{
Caller call = new Caller();
call.setCallfuc(new B());
call.call();
}
}
『肆』 Java回調函數
應該是有一個函數式介面Phone,它有唯一一個方法call(),消費者類實現這個介面Phone,商店老闆內類的對象中保存一個List<Phone>,當容中存放每個來買過熱狗的實現了Phone方法的對象;每當一個熱狗做好時,取出列表中第一個對象,調用它的call()方法通知它熱狗已做好。
『伍』 java裡面,c裡面都有回調函數,回調函數都是什麼東西啊
嗯,的確都有回調函數,但是C與java中的回調實現的方法不太一樣
C中的回調函數,是由指針實現的,將某個函數方法的地址賦給某個指針變數,然後直接由這個變數去調用方法。可以通過一個指針實現不同方法的調用。
java中,沒有指針這一概念。所以回調函數的意義似乎也不太一樣,感覺跟C比起來更像是團隊開發的一種手段和方法。java中的回調是通過介面實現的,調用函數不用知道被調用的函數是如何實現的,只需要寫好一個被調函數的介面聲明,然後根據介面調用。至於被調用函數,只需要重載介面方法就可以讓調用函數去調用...說白了就是,一個人只負責去寫大的程序流程,細節的方法部分不需要寫,只要留好介面聲明,然後讓別的人去寫這個介面的重載就可以了。更適合於團隊開發以及程序更新優化。
好吧我快給我自己說暈了
給你兩個例子去看下,這倆寫的還都比較清楚
java的:http://blog.csdn.net/allen_zhao_2012/article/details/8056665
C的:http://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html
『陸』 在java中回調函數怎麼理解,android中的回調函數和java中有區別嗎
可以理解為一種邏輯的延伸。例如在java中已onXXX開頭的方法。
這些方法通常是一種信專息的延伸。預示著屬某些事件發生了。這些信息通常是某些大邏輯的一部分。而其他部分不需要開發者考慮。
比如onCreate方法,了解了生命周期就會知道他是整個activity第一個執行的代碼。那麼他究竟是誰調用的。這個一般不需要考慮。只需要了解系統在調用即可。 而這個方法在執行的時候。需要你去補充這個方法的實現。 所以相當於你完成了事件的餘下部分。
比如早晨需要在鬧鈴響之後起床。那麼你可以設置一個timer來記時或者是一個線程來跑。當發現到的時候。需要把這個事件拋出去。至於誰來處理。這不是鬧鈴考慮的范圍。他的作用就是觸發事件.至於處理。那麼需要處理這個事件的。可以用很多方法來建立關聯的句柄。
比如。通過介面的實現。繼承。或者像android里的廣播。
回調函數描述的是一種模式。這個和語言或平台無關。所以android中和java中是一樣的。C++中也有。
『柒』 java 的回調函數是什麼 講的簡單些
就是你媽媽在做飯,你在玩電腦。媽媽做飯是回調函數,飯做完了會通知你,隨後你再執行關閉電腦方法去吃飯。沒有回調函數的話,在媽媽做完飯以前,你不能做其他事,只能等。做完飯了,你結束等待,去吃飯
『捌』 java中怎樣定義回調函數
程序員A寫了一段程序(程序a),其中預留有回調函數介面,並封裝好了該程序。程序員B要讓a調用自己的程序b中的一個方法,於是,他通過a中的介面回調自己b中的方法。目的達到。在C/C++中,要用回調函數,被掉函數需要告訴調用者自己的指針地址,但在JAVA中沒有指針,怎麼辦?我們可以通過介面(interface)來實現定義回調函數。
假設我是程序員A,以下是我的程序a:
[java] view plainprint?
public class Caller
{
public MyCallInterface mc;
public void setCallfuc(MyCallInterface mc)
{
this.mc= mc;
}
public void call(){
this.mc.method();
}
}
還需要定義一個介面,以便程序員B根據我的定義編寫程序實現介面。
public interface MyCallInterface
{
public void method();
}
於是,程序員B只需要實現這個介面就能達到回調的目的了:
public class B implements MyCallInterface
{
public void method()
{
System.out.println("回調");
}
public static void main(String args[])
{
Caller call = new Caller();
call.setCallfuc(new B());
call.call();
}
}
『玖』 在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中,通常就是編寫另外一個類或類庫的人(李四)規定一個介面,然後你(張三)來實現這個介面,然後把這個實現類的一個對象作為參數傳給別人的程序,別人的程序必要時就會通過那個介面來調用你編寫的函數。」