我的一亩三分地

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  2 随笔 :: 14 文章 :: 3 评论 :: 0 Trackbacks
         java里的嵌套类有四种:静态成员类(static member class)、非静态成员类(nonstatic member class)、匿名类(anonymous class)和局部类(local class)。

         静态成员类和非静态成员类的区别是:非静态成员类的每一个实例都隐含着与外围类的一个外围实例(enlosing instance)紧密关联在一起。在非静态成员类的实例方法内部,调用外围实例上的方法是有可能的,或者使用经过修饰的this指针可以得到一个指向外围实例的引用。如果声明的成员类不访问外围实例,则声明为静态成员类。如果使用了非静态成员类,那么它的每一个实例都将包含一个额外的指向外围对象的引用。

以上是《effective java》中的论述。下面是在网上找到的关于匿名类的叙述。

匿名类
       匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示: 
new <类或接口> <类的主体>
       这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。
       如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
        注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。
        从技术上说,匿名类可被视为非静态的内部类,所以它们具有和方法内部声明的非静态内部类一样的权限和限制。
        如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用。匿名类尤其适合在Swing应用程序中快速创建事件处理程序。

posted on 2006-09-24 10:15 王某某 阅读(231) 评论(0)  编辑  收藏 所属分类: Java基础

只有注册用户登录后才能发表评论。


网站导航: