Java回调函数的理解
通过一个例子来解释下什么是回调函数。
所谓回调,就是客户程序C去调用服务程序S的某个方法a,服务程序S又再调用客户程序的某个方法b,这时,对于客户程序C来说,b就是回调函数
由于C的方法b是给S调用的,服务程序要调用C的方法,当前服务程序S并不知道C的方法的名称,所以要定义C的方法规范,让C去实现
用一句通俗点的话说就是 “就是自己不想干活 还规定别人干活的思路”
代码示例
package com.demo; //服务程序要调用C的方法,当前服务程序S并不知道C的方法的名称,所以要定义C的方法规范,让C去实现 interface inS{ public void mether(); } public class C implements inS{ @Override public void mether() { // TODO Auto-generated method stub System.out.println("CCCC"); } public static void main(String[] args) { //客户程序调用服务程序S的注释函数 S s = new S(); s.setS(new C()); //服务程序S又反过来调用客户程序C的方法mether //对于C来说,这个mether就是回调函数 s.runM(); } } class S{ private inS ins; public void setS(inS s ){ ins = s; } public void runM(){ ins.mether(); } }

下面通过一个计算程序运行时间的示例来加深理解,通过回调函数,不需要更改计算程序的一行代码,只需要实现接口,复写要计算运行程序的方法代码就
可以了
package com.demo; class CalcTime{ private delayed dd; public void setDel(delayed dd){ this.dd = dd; } public void runTime(){ long startTime = System.currentTimeMillis(); dd.delay(); long endTime = System.currentTimeMillis(); System.out.println(endTime-startTime); } } public class Demo01 implements delayed{ public static void main(String[] args) { CalcTime c = new CalcTime(); c.setDel(new Demo01()); c.runTime(); } @Override public void delay() { // TODO Auto-generated method stub for (int i = 0; i <999999999; i++) { for (int j = 0; j < 888888888; j++) { } } } } interface delayed{ public void delay(); }
浙公网安备 33010602011771号