• Java中的内部类(回调)


    一、内部类的主要作用如下:

    1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

    2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

    3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

    二、内部类可分为以下几种:

    • 成员内部类
    • 静态内部类
    • 方法内部类
    • 匿名内部类。

    三、1,定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

          2,外部类是不能直接使用内部类的成员和方法滴,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

          3,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。HelloWorld.this.name

    四、Java回调

    回调用于层间协作,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。
    其实回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,必须由高层进行安装,这个安装函数其实就是一个低层提供的API,安装后低层不知道这个回调的名字,但它通过一个函数指针来保存这个回调,在需要调用时,只需引用这个函数指针和相关的参数指针。
    其实:回调就是该函数写在高层,低层通过一个函数指针保存这个函数,在某个事件的触发下,低层通过该函数指针调用高层那个函数。

    关于回调的总结:
    在Java中,通常就是编写另外一个类或类库的人规定一个接口,然后你来实现这个接口,然后把这个接口的一个对象作为参数传给别人的程序,别人的程序必要时就会通过那个接口来调用你编写的函数。

    下面这个程序会很好的表示回调执行的过程:

    public interface CallBack {   
         //执行回调操作的方法   
         void execute();   
     }
     1 public class Tools {   
     2        
     3     /**  
     4      * 测试函数使用时间,通过定义CallBack接口的execute方法  
     5      * @param callBack  
     6 */   
     7     public void testTime(CallBack callBack) {   
     8         long begin = System.currentTimeMillis();//测试起始时间   
     9         callBack.execute();//进行回调操作   
    10         long end = System.currentTimeMillis();//测试结束时间   
    11         System.out.println("[use time]:" + (end - begin));//打印使用时间   
    12     }   
    13        
    14     public static void main(String[] args) {   
    15         Tools tool = new Tools();   
    16         tool.testTime(new CallBack(){   
    17             //定义execute方法   
    18             public void execute(){   
    19                 //这里可以加放一个或多个要测试运行时间的方法   
    20                 TestObject.testMethod();
    21             }   
    22         });   
    23     }   
    24        
    25 }

    匿名内部类最常用的情况就是在回调当中的精彩表现。 回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口.







  • 相关阅读:
    (转)CKEditor+CKFinder 配置
    asp.net一个带抽象工厂的三层架构完整实例
    windows phone 8 手机存储卡数据
    c#常用算法
    mvvm 事件命令
    windows phone 8 语音识别1
    windows phone 8 分辨率
    PHP通用防注入安全代码《转》
    SQL查询语句使用详解《转》
    PHP中文件包含语句的区别《转》
  • 原文地址:https://www.cnblogs.com/java-xu/p/5416567.html
Copyright © 2020-2023  润新知