当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

关于JAVA匿名内部类的一点评论[Java编程]

赞助商链接



  本文“关于JAVA匿名内部类的一点评论[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
基本理论:

关于JAVA内部类:一个内部类的定义是定义在另一个类内部的类.
   存在它的缘由是:
   1.一个内部类的对象可以拜候成立它的对象的实现,包含私有数据.即内部类实例对包含它的哪个类的实例来说,是特权的.
   2.关于同一个包中的其他类来说,内部类可以躲藏起来,换句话说,内部类不管办法的可见性若何,那怕是public,除了包涵类,其他类都无法利用它.
   3.匿名内部类可以很便利的定义回调.
   4.利用内部类可以非常便利的编写事件驱动程序.

其实它真正的目的仅仅为了定义回调--进一步就是事件驱动.
接口和回调:编程一个常用的情势是回调情势,在这种情势中你可以指定当一个特按时间发生时回调对象上的办法.

注意事项:

匿名类和内部类中的中的this :
有时刻,我们会用到一些内部类和匿名类.当在匿名类顶用this时,这个this则指的是匿名类或内部类本身.
这时假如我们要利用外部类的办法和变量的话,则应当加上外部类的类名.以下面这个例子:

public class A {
  int i = 1;
  public A() {
    Thread thread = new Thread() {
      public void run() {
        for(;;) {
          A.this.run();
          try {
            sleep(1000);
          } catch(InterruptedException ie) {
          }
        }
      }
    };
    thread.start();
  } 
  public void run() {
    System.out.println("i = " + i);
    i++;
  }
  public static void main(String[] args) throws Exception {
    new A();
  }
}

在上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函数.
这时由于函数同名,直接调用就不行了.这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法关于一个开辟到半途的利用来说是不可取的
.那么便可以用这个例子中的办法用外部类的类名加上 this 引用来阐明要调用的是外部类的办法 run.

关于这个例子:

this.test(new Inner(){
             public void method1(){
                 System.out.print("1111");
           }
           
             public void method2(){
                 System.out.print("22222");
           }
});

这个时刻调用test()办法,那Inner类的method1和method2是什么时刻被调用的?莫非也是this对象向他们发消息(比方传入一个参数)吗?还是直接显式的调用??

关于Inner类,除了this这个类,就是this.test(...那句中的this,它可以调用Inner类的办法,其他地方都不行,但是,这也需求你在类中有个地方保存有对这个内部类实例的引用才可以.再阐明一次,内部类是用来在某个时刻调用表面的办法而存在的--这就是回调.
为了阐明内部类实例的办法只能在包涵类的实例中调用,其他地方无法调用,给个例子以下:
JAVA2实用教程源码:

/** 一个利用程序,用来演示内部类的利用 */
/** 类Outer */
class Outer{
private static int size;
/** 内部类Inner的声明 */
public class Inner{
private int size;
/** 办法doStuff() */
public void doStuff(int size){
size++; //存取部分变量
this.size++; //存取其内部类的成员变量
Outer.this.size++; //存取其外部类的成员变量
System.out.println(size+" "+this.size+" "+Outer.this.size);
}
}//内部类Inner完毕
/** 类Outer中定义的实例办法testInner()办法 */
public void testInner(){
Inner i=new Inner();
i.doStuff(5);
}
/** main()办法 */
public static void main(String[] a){
Outer o=new Outer();
o.testInner();
}
}//类Outer完毕
  以上是“关于JAVA匿名内部类的一点评论[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 关于JAVA匿名内部类的一点评论
  • 关于Java栈与堆的考虑
  • <b>关于Java对象序列化您不知道的5件事</b>
  • 关于Java Database Connectivity您不知道的5件事:晋升您和JDBC
  • <b>关于Java性能监控您不知道的5件事,第2部份:操作JDK内置解析器</b>
  • 关于Java Scripting API您不知道的5件事,Java平台上更简单的脚
  • 关于Java的注释
  • 关于java vm的垃圾堆积
  • 关于java承当的一点考虑
  • 你该当知道的10件关于Java 6的事情
  • <b>关于Java角色访谒掌握(RBAC)</b>
  • <b>关于Java占用内存的研究</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .