真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于Java談回調(diào)函數(shù)

雜談

創(chuàng)新互聯(lián)專注于濉溪企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城開發(fā)。濉溪網(wǎng)站建設(shè)公司,為濉溪等地區(qū)提供建站服務(wù)。全流程按需制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

還是習(xí)慣,寫點什么之前,都喜歡來點雜談。

最近都在搞微信的開發(fā),終于在昨晚進入測試階段了,好快就測出 bug 來,但也好快修復(fù)了。這也讓我更擔(dān)心。

雖說是進入內(nèi)測階段,但那代碼的結(jié)構(gòu)也真太難看了,還得好好重構(gòu)一下。遲點得寫寫關(guān)于這微信公眾號的開發(fā)文章。下次再詳談。

今天開始了三天半的小長假,但我還是堅守在學(xué)校。有點不知道為了什么。

剛給 wp 裝了個 markdown 插件,爽歪歪??!

在寫這篇文章的時候,還是用著 wordpress 的,但在發(fā)表的時候,已經(jīng)換成 hexo 了。原因:沒有找到一個完美支持 markdown 的插件,越來越覺得 wp 很臃腫,于是,就擁抱了小蘿莉 hexo 了。哈哈。

還有,今天微博看到的一個很贊的神器 GitBook ,分享一下:

Build beautiful programming books and exercises using GitHub/Git and Markdown.

http://www.gitbook.io/

正題,談回調(diào)函數(shù) (Callback)

解釋(引用于百度百科):

回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被用來調(diào)用其所
指向的函數(shù)時,我們就說這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時由另外的一方調(diào)
用的,用于對該事件或條件進行響應(yīng)。

機制(引用于百度百科):

⑴定義一個回調(diào)函數(shù);

⑵提供函數(shù)實現(xiàn)的一方在初始化的時候,將回調(diào)函數(shù)的函數(shù)指針注冊給調(diào)用者;

⑶當特定的事件或條件發(fā)生的時候,調(diào)用者使用函數(shù)指針調(diào)用回調(diào)函數(shù)對事件進行處理。

意義(個人理解):

調(diào)用者和被調(diào)用者的關(guān)系簡單化,互相不用關(guān)心對方的邏輯處理,不用關(guān)系對方都程序是怎么的,只關(guān)系返回值,這種基于返回值
的機制很好地使兩者的關(guān)系簡單,明了。

上代碼,以下講述阿 Ben 去飯?zhí)贸燥埖墓适?/p>

接口 Callback

接口定義事情 Done 了之后應(yīng)該做些什么

public interface Callback {
  public void Done(String str);
}

Ben 類

阿 Ben 餓了,于是要去 have lunch,他叫了 Aunt 幫他煮個飯,調(diào)用 Aunt 的 cookMeal 方法,于是 Aunt 就去煮了,至于怎么煮,Ben 就不用管了,只要煮好了,就調(diào)用 Done,給飯阿 Ben 吃就可以了。

public class Ben implements Callback {

  public void havelunch(Aunt aunt){
    aunt.cookMeal(this);
  }

  @Override
    public void Done(String str) {
    System.out.println(str); 
  }

}

Aunt 類

賦值給 str 就是煮飯的過程,煮好之后,就把結(jié)果(飯菜)返回給主函數(shù)(Ben)。

public class Aunt {

  String str;
  
  public void cookMeal(Callback callback){
    str=" 香噴噴的飯菜來咯 ";  // 這個就是煮飯的過程
    callback.Done(str);
  }

}

測試類

public class test {

  /**
  * @param args
  */
  public static void main(String[] args) {
    Aunt class2=new Aunt();
    Ben class1=new Ben();
    class1.havelunch(class2);
  }

}

結(jié)果:

基于Java 談回調(diào)函數(shù)

剛才阿姨在煮飯的時候,阿 Ben 是傻乎乎地站在那里等,等同于是在陪阿姨做飯,這個就是同步回調(diào)。

時間怎么可以這么浪費的呢。下面來看看異步回調(diào)。

異步回調(diào)

這個時候,阿姨還是規(guī)規(guī)矩矩地做飯。而啊 Ben,得同時做點事情。所以只需要修改 Ben 類。

public class Ben implements Callback {


  public void havelunch(final Aunt aunt){
    new Thread(new Runnable() { //new 一個新的線程去做這個事情,并等待返回結(jié)果
    
      @Override
      public void run() {
      aunt.cookMeal(Ben.this);
      }
    }).start();
  
    play(); // 在阿姨做飯的時候可以玩一會手機先嘛。就不用傻傻地等了,阿姨煮好飯會喊吃的了。
  } 
  
  public void play(){
    System.out.println(" 玩手機,刷微博,朋友圈,聊扣扣 ");
  }
  
  @Override
  public void Done(String str) {
    System.out.println(str); 
  }

}

結(jié)果:

基于Java 談回調(diào)函數(shù)

總結(jié):

回調(diào)函數(shù)就是那么一回事。

今天在一篇 nodejs 的文章看到了一句話是這么說的:

在代碼中,異步編程的直接體現(xiàn)就是回調(diào)。異步編程依托于回調(diào)來實現(xiàn),但不能說使用了回調(diào)后程序就異步化了。

說的不就是這個道理么。呵呵。

以上是我個人的理解,如有錯誤,望指出。


本文名稱:基于Java談回調(diào)函數(shù)
網(wǎng)站鏈接:http://weahome.cn/article/jpjphh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部