<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-200  評論-148  文章-15  trackbacks-0

    回調函數還真有點像您隨身帶的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()方法,就只有"http://測試方法"是需要改變的,下面我們來做一個函數實現相同功能但更靈活:
    首先定一個回調接口:
    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當總,但是每一個方法的內容是不相同的。

    再比如算法比較多的情況下,也可以采用這種實現模式來實現。最近看了SWT,發現里面好多的事件驅動都是采用回調來實現的。比如給按鈕添加事件:

                                Button okButton = createButton(buttons, "&Ok", "Process input",
                                           new MySelectionAdapter(){
                                               public void widgetSelected(SelectionEvent e) 
                                               {
                                                   System.out.println("Name:         " + nameField.getText());
                                                   System.out.println("Address:      " + addrField.getText());
                                                   System.out.println("Phone number: " + phoneField.getText());
                                               }
                                           });

    匿名內部類最常用的情況就是在回調當中的精彩表現。

     

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

    posted on 2010-11-03 10:57 無聲 閱讀(341) 評論(0)  編輯  收藏 所屬分類: 職場生活
    主站蜘蛛池模板: 国产中文字幕免费| 国产免费福利体检区久久| 亚洲国产精品无码久久久| 亚洲午夜精品在线| 亚洲国产成人手机在线电影bd| 在线jlzzjlzz免费播放| 成人免费视频77777| 免费av欧美国产在钱| 成人毛片免费播放| 国产老女人精品免费视频| 国产精品免费看久久久无码| 免费看国产一级特黄aa大片| 亚洲成AⅤ人影院在线观看| 亚洲精品人成无码中文毛片 | 亚洲欧美日韩中文字幕在线一区| 伊人久久五月丁香综合中文亚洲| 亚洲色大成WWW亚洲女子| 亚洲av无码专区国产不乱码| 黄色a三级免费看| 久久嫩草影院免费看夜色| 亚洲熟妇色自偷自拍另类| 久久精品国产亚洲AV久| 看亚洲a级一级毛片| 国产福利免费视频 | 免费无码AV一区二区| 国产免费人成视频尤勿视频| 日韩电影免费在线观看| 97免费人妻无码视频| 国产精品国产午夜免费福利看| 亚洲无码高清在线观看| 亚洲国语精品自产拍在线观看| 亚洲天堂一区二区三区四区| 亚洲成a人片在线观看天堂无码| 成年大片免费高清在线看黄| 嫩草在线视频www免费观看| 妻子5免费完整高清电视| 亚洲 无码 在线 专区| 久久久久亚洲AV无码专区首| 亚洲看片无码在线视频| sihu国产精品永久免费| 亚洲精品视频免费看|