zoukankan      html  css  js  c++  java
  • Java 回调函数的理解

          以下是我对java回调函数的理解,希望对各位有帮助。

      简而言之,假设有两个类A与B,还有一个回调接口C(有一个c方法)。其中A类持有一个B类对象作为属性和拥有一个a方法,并实现了接口C,所以A类中就有a、c两个方法。B类中就仅有b方法。当外部程序调用A对象中的方法a时,a就会调用B类对象的b方法,b方法最后又调回A类中的c方法,此过程就是一个回调。

      上面的解析有点抽象,下面我就用例子演示一下。

      首先定义一个接口(即上面解析中的C角色):

      Java代码

      package com.peng.callback;

      public interface OnEndPlay {

      public void endPlay(String program);//c方法

      }

      然后定义一个MediaPlayerService(即A角色)对象实现OnEndPlay(C角色):

      Java代码

      package com.peng.callback;

      public class MediaPlayerService implements OnEndPlay{

      private MediaPlayer player=new MediaPlayer();

      public void doPlay(String program)//a方法

      {

      player.play(this,program);

      }

      @Override

      public void endPlay(String program) //c方法

      {

      System.out.println(program+":节目播放结束!");

      }

      }

      在定义一个MediaPlayer (B角色):

      Java代码 收藏代码

      package com.peng.callback;

      public class MediaPlayer {

      public void play(OnEndPlay callback,String program)//b方法

      {

      int count=0;

      while (count<10)

      {

      System.out.println(program+":正在播放。。。。");

      count++;

      try

      {

      Thread.sleep(1000);

      } catch (InterruptedException e)

      {

      e.printStackTrace();

      }

      }

      callback.endPlay(program);

      }

      }

      最后用一个测视类测试:

      Java代码

      package com.peng.callback;

      public class Test {

      public static void main(String[] args)

      {

      final MediaPlayerService playService=new MediaPlayerService();

      final String program="湖南卫视";

      new Thread(new Runnable() {

      @Override

      public void run()

      {

      playService.doPlay(program);

      }

      }).start();

      }

      }

      运行结果为:

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:正在播放。。。。

      湖南卫视:节目播放结束!

      疯狂软件学习中心是一所Java人才的专业机构,它最核心的价值在于能让应届大学毕业生与企业无缝对接,课程设计与企业需求高度结合,使其在进入企业后能立即上手。

      学真正Java技术,当然选疯狂软件Java培训机构,打造国内高级Java人才

      疯狂软件Java培训优势

      1. Java是世界第一大编程语言,市场占有率达20%。

      2.广州最专业Java培训机构,多年教学经验。

      3.学员技术牛就业率最好,就业薪资都在5000以上。

      4.部分老师还是Java技术系列书籍的作者,由这样的Java书籍原创作者讲课可想而知课程条理清晰、讲解清楚,知识面广、深度足够!

      5.疯狂软件Java培训课程以项目实战带动教学,上课打破传统课堂模式,以实训项目贯穿教学,带领学生一起做企业真实项目。

      疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。

  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/gojava/p/3559136.html
Copyright © 2011-2022 走看看