回调函数透彻理解Java

简介: 回调函数,第一次见是在Java编程思想中,以及后来的观察者模式也应用了回调函数的思想。但是一直都没有重视,终于在一次面试的时候吃亏了,越来越理解为什么很多人说Java编程思想这本书要一遍遍的看,吃透!         首先在网络上搜索很多文章介绍什么是回调函数,看的云里雾里的。

  回调函数,第一次见是在Java编程思想中,以及后来的观察者模式也应用了回调函数的思想。但是一直都没有重视,终于在一次面试的时候吃亏了,越来越理解为什么很多人说Java编程思想这本书要一遍遍的看,吃透!

        首先在网络上搜索很多文章介绍什么是回调函数,看的云里雾里的。后来自己一步步分解终于理解了,记录如下。

        从维基百科上面摘抄定义:(看完本篇文章再来理解这个定义)

        计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

        在Java里面,我们使用接口来实现回调。

        这篇文章中的解说定义非常好:http://blog.csdn.net/sweetwxh/article/details/2067139

        所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。下面是例子。

      1.  首先定义一个类Caller,按照上面的定义就是程序员A写的程序a,这个类里面保存一个接口引用。

      

[java]  view plain copy
 
  1. public class Caller {  
  2.     private MyCallInterface callInterface;  
  3.       
  4.     public Caller() {  
  5.     }  
  6.       
  7.     public void setCallFunc(MyCallInterface callInterface) {  
  8.         this.callInterface = callInterface;  
  9.     }  
  10.       
  11.     public void call() {  
  12.         callInterface.printName();  
  13.     }  
  14. }  


       2.  当然需要接口的定义,为了方便程序员B根据我的定义编写程序实现接口。

  

[java]  view plain copy
 
  1. public interface MyCallInterface {  
  2.     public void  printName();  
  3. }  


      3.  第三是定义程序员B写的程序b

[java]  view plain copy
 
  1. public class Client implements MyCallInterface {  
  2.   
  3.     @Override  
  4.     public void printName() {  
  5.         System.out.println("This is the client printName method");  
  6.     }  
  7. }  


       4.  测试如下

[java]  view plain copy
 
  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         Caller caller = new Caller();  
  4.         caller.setCallFunc(new Client());  
  5.         caller.call();  
  6.     }  
  7. }  


      看到这里应该明白什么是回调了,有些文章介绍的很好,但是刚开始没看明白,是因为把第3步的类省略,直接写成匿名类了。

        5.  在测试方法中直接使用匿名类,省去第3步。

[java]  view plain copy
 
  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         Caller caller = new Caller();  
  4. //      caller.setCallFunc(new Client());  
  5.         caller.setCallFunc(new MyCallInterface() {  
  6.             public void printName() {  
  7.                 System.out.println("This is the client printName method");  
  8.             }  
  9.         });  
  10.         caller.call();  
  11.     }  
  12. }  


      看完了上面的文章,直接看下面这篇文章:http://kidult.iteye.com/blog/148982

      以上就是回调函数的全部理解。

目录
相关文章
|
8月前
|
Java
第一季:4方法的参数传递机制【Java面试题】
第一季:4方法的参数传递机制【Java面试题】
41 0
|
11月前
|
Java
Java8 - 自定义实现体会Future的原理
Java8 - 自定义实现体会Future的原理
51 0
|
11月前
|
Java
Java8 - 自定义实现体会CompletableFuture的原理
Java8 - 自定义实现体会CompletableFuture的原理
60 0
|
11月前
|
Java
【java筑基】——为什么java中方法的参数传递机制没有引用传递
【java筑基】——为什么java中方法的参数传递机制没有引用传递
|
12月前
|
Java
java里的“==”和“equels”区别,简单的代码,无敌的详细。
java里的“==”和“equels”区别,简单的代码,无敌的详细。
55 0
|
12月前
|
缓存 Java API
面试官:你知道 Java 中的回调机制吗?我竟然答不来。。
面试官:你知道 Java 中的回调机制吗?我竟然答不来。。
面试官:你知道 Java 中的回调机制吗?我竟然答不来。。
|
Java 编译器
【Java】方法入门&扩展知识点
本期主要介绍方法入门&扩展知识点
70 0
【Java】方法入门&扩展知识点
|
Java C语言
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(三)
前言 咱们在C语言里肯定都学过函数吧,相信大家对函数的理解已经很深刻了,因为函数在C里用的会很多,特别是做项目的时候,会分模块来写,Java里同样为大家提供了“函数”,只不过叫法不一样,Java里叫【方法】,接下来请往下看
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(三)
|
Java Go C语言
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(一)
前言 咱们在C语言里肯定都学过函数吧,相信大家对函数的理解已经很深刻了,因为函数在C里用的会很多,特别是做项目的时候,会分模块来写,Java里同样为大家提供了“函数”,只不过叫法不一样,Java里叫【方法】,接下来请往下看
|
Java C语言
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(二)
前言 咱们在C语言里肯定都学过函数吧,相信大家对函数的理解已经很深刻了,因为函数在C里用的会很多,特别是做项目的时候,会分模块来写,Java里同样为大家提供了“函数”,只不过叫法不一样,Java里叫【方法】,接下来请往下看
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(二)