一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 基于Java 談回調函數

基于Java 談回調函數

2020-10-23 21:02hackeris Java教程

回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所 指向的函數時,我們就說這是回調函數

雜談

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

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

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

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

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

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

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

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

http://www.gitbook.io/

正題,談回調函數 (Callback)

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

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

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

⑴定義一個回調函數;

⑵提供函數實現的一方在初始化的時候,將回調函數的函數指針注冊給調用者;

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

意義(個人理解):

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

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

接口 Callback

接口定義事情 Done 了之后應該做些什么

?
1
2
3
public interface Callback {
  public void Done(String str);
}

Ben 類

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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 就是煮飯的過程,煮好之后,就把結果(飯菜)返回給主函數(Ben)。

?
1
2
3
4
5
6
7
8
9
10
public class Aunt {
 
  String str;
  
  public void cookMeal(Callback callback){
    str=" 香噴噴的飯菜來咯 "// 這個就是煮飯的過程
    callback.Done(str);
  }
 
}

測試類

?
1
2
3
4
5
6
7
8
9
10
11
12
public class test {
 
  /**
  * @param args
  */
  public static void main(String[] args) {
    Aunt class2=new Aunt();
    Ben class1=new Ben();
    class1.havelunch(class2);
  }
 
}

結果:

基于Java 談回調函數

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

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

異步回調

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Ben implements Callback {
 
 
  public void havelunch(final Aunt aunt){
    new Thread(new Runnable() { //new 一個新的線程去做這個事情,并等待返回結果
    
      @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);
  }
 
}

結果:

基于Java 談回調函數

總結:

回調函數就是那么一回事。

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

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

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

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

原文鏈接:http://hackeris.me/2014/04/06/talkingcallback/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产第一综合另类色区奇米 | 99资源在线观看 | 国产一页 | 精品久久久久久国产91 | 亚洲成年男人的天堂网 | 精品无码一区二区三区中文字幕 | 欧美成人第一页 | 亚洲天堂日韩在线 | 9久热久爱免费精品视频在线观看 | 91日本在线| 亚洲AV无码A片在线观看蜜桃 | 包臀裙女教师波多野结衣 | 久久 这里只精品 免费 | 44444色视频在线观看 | 无人区乱码区1卡2卡三卡在线 | 精品久久久久久国产 | 国内精品一区二区三区东京 | 4tube欧美高清 | 女同性互吃奶乳免费视频 | 女教师巨大乳孔中文字幕免费 | 微拍秒拍99福利精品小视频 | 国产一级在线观看 | 精品一区二区三区在线成人 | 情缘免费观看完整版 | 国产亚洲女在线精品 | 高清国语自产拍免费视频国产 | 俺去俺也在线www色官网 | 黄瓜视频免费 | 67194在线免费观看 | 男人摸女人下面 | 羞羞视频动漫 | 99国内精品久久久久久久黑人 | videos变态极端 | 91porny紧身翘臀 | 男人的j伸到女人的屁股眼 男人吃奶动态图 | 91极品国产 | 久久成人a毛片免费观看网站 | 99精彩免费观看 | 四虎影院免费在线播放 | 日韩精品 欧美 | 性xx色3d动画xx无尽 |