回調函數java
① 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怎麼實現c的回調函數
以我的理解恐怕這個CALLBACK要讓你失望了~~JAVA的操作機制是隱藏了指針和引用,地址的操作在JAVA裡面是不允許的~~所以JNI介面中定義的方法,不能使用函數指針作為形參,所以這個回調函數在JAVA的CLASS中是不能調用的;
你換個思考角度用TCP/UDP程序吧,JAVA的CLASS調用的結果通過流傳遞給C/C++的Server。。。貌似我只能想到這樣了。
望採納!!
③ Java的回調函數和觀察者模式的區別
java的回調 叫listener 模式。
無論是listener模式,還是C++裡面的callback模式,本質是一樣的
他們都是觀察者模式的具體實現。
觀察者模式是設計模式中定義的一種思想,而具體到不同的語言環境,使用不同的語法表現出來就會有java的listener objc的 delegate,或者C++的 callback。
④ Java中什麼是介面回調
可以把使用某一介面的類創建的對象的引用賦給該介面聲明的介面變數,那麼該介面變數就可以調用被類實現的介面的方法。
實際上,當介面變數調用被類實現的介面中的方法時,就是通知相應的對象調用介面的方法,這一過程稱為對象功能的介面回調。
Java語言特點
Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特徵去掉了,這些特徵是一般程序員很少使用的。
例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載(overload)和多繼承特徵,並且不使用主文件,免去了預處理程序。因為Java沒有結構,數組和串都是對象,所以不需要指針。
⑤ java中怎樣定義回調函數
程序員A寫了一段程序(程序a),其中預留有回調函數介面,並封裝好了該程序。程序員B要讓a調用自己的程序b中的一個方法,於是,他通過a中的介面回調自己b中的方法。目的達到。在C/C++中,要用回調函數,被掉函數需要告訴調用者自己的指針地址,但在JAVA中沒有指針,怎麼辦?我們可以通過介面(interface)來實現定義回調函數。x0dx0a假設我是程序員A,以下是我的程序a:x0dx0a[java]viewplainprint?x0dx0apublicclassCallerx0dx0a{x0dx0apublicMyCallInterfacemc;(MyCallInterfacemc)x0dx0a{x0dx0athis.mc=mc;x0dx0a}x0dx0ax0dx0apublicvoidcall(){x0dx0athis.mc.method();x0dx0a}x0dx0a}x0dx0a還需要定義一個介面,以便程序員B根據我的定義編寫程序實現介面。x0dx0ax0d\x0dx0a{x0dx0apublicvoidmethod();x0dx0ax0dx0a}x0dx0a於是,程序員B只需要實現這個介面就能達到回調的目的了:x0d\x0dx0a{x0dx0apublicvoidmethod()x0dx0a{x0dx0aSystem.out.println("回調");x0dx0a}(Stringargs[])x0dx0a{x0dx0aCallercall=newCaller();x0dx0acall.setCallfuc(newB());x0dx0acall.call();x0dx0a}x0dx0a}
⑥ 在java中回調函數怎麼理解,android中的回調函數和java中有區別嗎
可以理解為一種邏輯的延伸。例如在java中已onXXX開頭的方法。
這些方法通常是一種信息的延伸。預示著某些事件發生了。這些信息通常是某些大邏輯的一部分。而其他部分不需要開發者考慮。
比如onCreate方法,了解了生命周期就會知道他是整個activity第一個執行的代碼。那麼他究竟是誰調用的。這個一般不需要考慮。只需要了解系統在調用即可。 而這個方法在執行的時候。需要你去補充這個方法的實現。 所以相當於你完成了事件的餘下部分。
比如早晨需要在鬧鈴響之後起床。那麼你可以設置一個timer來記時或者是一個線程來跑。當發現到的時候。需要把這個事件拋出去。至於誰來處理。這不是鬧鈴考慮的范圍。他的作用就是觸發事件.至於處理。那麼需要處理這個事件的。可以用很多方法來建立關聯的句柄。
比如。通過介面的實現。繼承。或者像android里的廣播。
回調函數描述的是一種模式。這個和語言或平台無關。所以android中和java中是一樣的。C++中也有。
⑦ java中何為鉤子方法和回調函數
問得不清楚,所以不懂怎麼回答這個區別。
所謂回調函數,一般就是把函數的地址作為參數傳進去,讓調用的函數在內部可以調用這個函數。
例子:
void CALLBACK fun(){...} 這是一個函數,回調函數
void AAA(int a, Fun* p); 這是一個普通函數,但第二個參數是fun
AAA(5, fun);
⑧ 誰能幫我寫一個java的回調函數的例子
你好,我寫了個很簡單的代碼,你一看就明白了
public class A {
int value = 1001;
public A() {// A的構造函數,執行B的exec()方法,裡面又帶有對A的getValue()方法調用,這個就叫做回調
B b = new B(this);
b.exec();
}
public int getValue() {
return value;
}
public static void main(String[] args) {
new A();//構造函數里已經發生了回調,所以不需要更多的代碼
}
}
class B {
private A a;
public B(A a) {
this.a = a;
}
public void exec() {
System.out.println(a.getValue());// 這里調用了a的getValue()方法
}
}
⑨ 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 什麼是回調
所謂回調,就是客戶程序Client調用服務程序Service中的某個方法A,然後Service又在某個時候反過來調用Client中的某個方法B,對於Client來說,這個B便叫做回調函數
回調實現的步驟
1、定義回調介面和回調方法
2、Client實現回調介面和回調方法,並在Client中包含Service引用,通過引用調用Servie中的方法並且必須傳入一個當前對象Client(因為當前對象實現了CallBack介面所以也屬於介面對象)
3、在Service中定義一個介面對象並在方法中對初始化(將Client傳過來的當前對象賦值給介面對象),通過介面對象調用介面中方法(調用的Client實現的介面方法)
4、測試