以下是我对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培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。