001-java回調基礎學習

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

在需要調用時,只需引用這個函數指針和相關的參數指針。
其實:回調就是該函數寫在高層,低層通過一個函數指針保存這個函數,在某個事件的觸發下,低層通過該函數指針調用高層那個函數。

關於回調的總結:

在Java中,通常就是編寫另外一個類或類庫的人規定一個接口,然後你來實現這個接口,然後把這個接口的一個對象作爲參數傳給別人的程序,別人的程序必要時就會通過那個接口來調用你編寫的函數。
下面使用java回調函數來實現一個測試函數運行時間的工具類:
如果我們要測試一個類的方法的執行時間,通常我們會這樣做:
java 代碼
public class TestObject {   
    /**  
     * 一個用來被測試的方法,進行了一個比較耗時的循環  
     */   
    public static void testMethod(){   
        for(int i=0; i<100000000; i++){   
               
        }   
    }   

/**  
     * 一個簡單的測試方法執行時間的方法  
     */   
    public void testTime(){   
        long begin = System.currentTimeMillis();//測試起始時間   
        testMethod();//測試方法   
        long end = System.currentTimeMillis();//測試結束時間   
        System.out.println("[use time]:" + (end - begin));//打印使用時間   
    }   
public static void main(String[] args) {   
        TestObject test=new TestObject();   
        test.testTime();   
    }   
}   

大家看到了testTime()方法,就只有"//測試方法"是需要改變的,下面我們來做一個函數實現相同功能但更靈活:
首先定一個回調接口:
java 代碼
public interface CallBack {   
    //執行回調操作的方法   
    void execute();   
}   

然後再寫一個工具類:
java 代碼
public class Tools {   
       
    /**  
     * 測試函數使用時間,通過定義CallBack接口的execute方法  
     * @param callBack  
     */   
    public void testTime(CallBack callBack) {   
        long begin = System.currentTimeMillis();//測試起始時間   
        callBack.execute();///進行回調操作   
        long end = System.currentTimeMillis();//測試結束時間   
        System.out.println("[use time]:" + (end - begin));//打印使用時間   
    }   
       
    public static void main(String[] args) {   
        Tools tool = new Tools();   
        tool.testTime(new CallBack(){   
            //定義execute方法   
            public void execute(){   
                //這裏可以加放一個或多個要測試運行時間的方法   
                TestObject.testMethod();
            }   
        });   
    }   
       
}

通過上面的文字和代碼我們可以理解了什麼叫做java的回調。那麼我們具體在什麼時候使用回調函數呢?

在進行JDBC編程的時候,我們經常要寫到try catch語句塊,而如果採用回調技術,那麼完全可以避免重複的去寫,將自己的方法體使用一個回調接口的方法來實現,每次都傳到同一個try catch當總,但是每一個方法的內容是不相同的。

回調是一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口.

爲了您的安全,請只打開來源可靠的網址
 
來自: http://hi.baidu.com/dongruofan/blog/item/9f68b003488e1810728da57a.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章