谈谈我对Java中CallBack的理解
转载自: http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html

  CallBack是回调的意思,熟悉Windows编程的人对"回调函数"这四个字一定不会陌生,但是Java程序员对它可能就不太了解了。"回调函数"或者"回调方法"是软件设计与开发中一个非常重要的概念,掌握"回调函数"的思想对程序员来说(不管用哪种语言)是非常必要的。

  那么什么是回调函数呢?我认为,回调函数就是预留给系统调用的函数,而且我们往往知道该函数被调用的时机。这里有两点需要注意:第一点,我们写回调函数不是给自己调用的,而是准备给系统在将来某一时刻调用的;第二点,我们应该知道系统在什么情形下会调用我们写的回调函数。

  这里举个现实生活中"回调函数"的例子来帮助大家更好的理解。我们平时考试答题的第一件事是干嘛?没错,是写上学号和姓名。这里注意了,我们填写学号和姓名不是给自己看的(即该方法不是给自己调用的),而是给老师登记分数时看的(预留给系统将来调用),这其实就是一个回调的应用。

下面再来看一下Android中应用到"回调"的场景。

场景一:

Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new Button.OnClickListener() {//回调函数
@override
public void onClick(View v) {buttonTextView.setText("按钮被点击了");
}
});

上面的代码给按钮加了一个事件监听器,这其实就是"回调"最常见的应用场景之一。我们自己不会显示地去调用onClick方法。用户触发了该按钮的点击事件后,它会由Android系统来自动调用。

场景二:

@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
// You code...
}@Override
public void onResume() {
super.onResume();
// You code...
}

上面的方法大家就更熟悉了,这是Android系统在Activity类中设置的回调函数,在Activity生命周期的不同阶段,Android系统会自动调用相应的方法(onCreate, onPause, onResume,onDestroy等等)

以上是两个Android中用到"回调"的场景,他们的代码实现可能不同,但是思想上是相近的,都是"回调"思想的体现。下面,我们在Java中分别模拟这两个场景。

首先模拟注册事件监听器。先写一个监听器接口

package com.listener;/**
* 点击监听器接口
* @author CodingMyWorld
*
*/
public interface MyOnClickListener {publicvoid onClick();
}

然后写一个我们自己的Button类

package com.listener;public class MyButton {private MyOnClickListener listener;/*** 设置具体点击监听器* @param listener 点击监听器实现类*/public void setOnClickListener(MyOnClickListener listener) {this.listener = listener;}/*** 按钮被点击*/public void doClick() {listener.onClick();}
}

最后模拟Client端的注册监听器和触发点击操作。

package com.listener;public class Client {public static void main(String[] args) {MyButton button =new MyButton();//注册监听器button.setOnClickListener(new MyOnClickListener() {@Overridepublic void onClick() {System.out.println("按钮被点击了");}});//模拟用户点击button.doClick();}
}

以上就是"回调"思想在Java中事件监听的运用,我们再模拟第二个场景,"回调"在activity生命周期方法调用的体现。由于比较简单,我就不多做解释了,大家直接看代码。

package com.activity;public abstract class Activity {protected void onCreate() {System.out.println("创建准备~~~~~~~");}protected void onDestroy() {System.out.println("销毁准备~~~~~~~~");}
}
package com.activity;public class ConcreteActivity extends Activity {@Overrideprotected void onCreate() {super.onCreate();System.out.println("创建中!!!");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("销毁中!!!");}
}
package com.activity;public class Client {public static void main(String[] args) {Activity activity =new ConcreteActivity();activity.onCreate();activity.onDestroy();}
}

【转载】谈谈我对Java中CallBack的理解相关推荐

  1. 谈谈我对Java中CallBack的理解

    CallBack是回调的意思,熟悉Windows编程的人对"回调函数"这四个字一定不会陌生,但是Java程序员对它可能就不太了解了."回调函数"或者" ...

  2. 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计

    谈谈对java中分层的理解 "I want a card", this is the first demand point that the customer said in th ...

  3. 沉淀再出发:关于java中的AQS理解

    沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的 ...

  4. 谈谈你对Java异常处理机制的理解

    谈谈你对Java异常处理机制的理解 先谈谈我的理解:异常处理机制可以说是让我们编写的程序运行起来更加的健壮,无论是在程序调试.运行期间发生的异常情况的捕获,都提供的有效的补救动作,任何业务逻辑都会存在 ...

  5. Java中 多态的理解

    ** Java中 多态的理解 ** 多态官方定义为: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指 ...

  6. JAVA中多态的理解

    Java中多态的理解 JAVA中的多态可以简单的理解为一种事物的多种形态,当然多态是在继承的基础上有重写才存在. 标题如何理解一种事物的多种形态? 举个例子,拿人类.男人.女人来说.男人.女人.都分别 ...

  7. [转载] 基本概念:java中的访问修饰符

    参考链接: Java中类或接口的访问说明符 转自:https://www.cnblogs.com/tjudzj/p/4443066.html 对Java中的修饰符一直记不住,现在结合网上的一些资料进行 ...

  8. Java中Volatile的理解

    首先我们知道Java中的内存模型 即:线程工作内存--主内存 工作内存是线程私有的,主内存是线程共有的 变量的初始化,生成都在主内存,工作内存只有使用到该变量时才从主内存加载操作 共八中原子性操作,r ...

  9. java中equals的理解(1)

    在Java字符串那些事儿一文发表后,朋友给我留言说:比较字符串用equals不就完了呗,干嘛要用"==",吃饱了撑的,能不能来点实际的.其实在文章里我是想表明,Java字符串两种声 ...

最新文章

  1. 网络工程师课程---4、网络层(网关是什么)
  2. matlab导出jar包错误Error: An error occurred while shelling out to javac(erro code = 1)解决办法...
  3. eyoucms的添加内容发布
  4. 9.28 linux系统基础优化
  5. 22届腾讯暑期实习三轮面试面经(已oc)
  6. 如何使用Java 8 FlatMap JDBC ResultSet?
  7. VS2010项目配置详解
  8. mvn本地库导入jar包
  9. windows环境的rabbitmq安装与启动
  10. 优必选能开放软硬件源代码吗_开放式硬件为何胜出
  11. 腾讯云总裁邱跃鹏:新基建最大的改变是从硬件到软件的转变
  12. app里面可以运行php,我可以在googleappengine for Python上运行PHP文件吗?
  13. 游戏筑基开发之回调函数(C语言)
  14. 【2017西安邀请赛:A】XOR(区间异或最大值多次查询---线段树+线性基合并)
  15. Java 垃圾回收机制原理
  16. jeecgboot框架简介
  17. qpython3手机版教程,qpython3手机版下载
  18. K线买入信号有哪些?
  19. 浅谈中国各类教育优缺点
  20. 一致性哈希算法在分布式系统中的应用

热门文章

  1. 爬虫笔记(一)——快速使用urllib库
  2. Centos6.4建立本地yum源
  3. form 表单 + HTML5(FileReader) +iframe 实现无刷新图片上传+图片预览效果
  4. 苹果大战FBI将加速科技圈的加密技术发展?
  5. 基于redis的cas集群配置(转)
  6. 在线文档预览方案-office web apps
  7. poj 2777 Count Color
  8. asp.net的定义
  9. 需求分析说明书(四)
  10. Vue-router(三) 参数传递