a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 144|回复: 0

[专业语言] JAVA高级编程:Java匿名类

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。9 n* q# J: m4 \5 Y8 n5 q
   
7 b6 E7 n5 I$ k' [* e- }    这就要采用另一种形式的new语句,如下所示:
6 e  Z6 P' C# X    + M: C; O" D" S2 {& f* I( m9 e
    new  ! n/ |$ C$ X9 X( S: d! U! r
    + q! D) H* _) @2 k
    这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。1 b! v' a9 b) V) x! {  r
    - S( ~6 x. y# O6 K0 N) ~. n/ v4 [
    如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。+ e+ D  v3 r- c' a7 U1 b
   
/ ?5 b  v5 T1 w2 g0 K9 w    注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。
( R$ s4 z7 Q) f; h& Q    6 h1 j3 J! r, Y+ u
    从技术上说,匿名类可被视为非静态的内部类,所以它们具有和方法内部声明的非静态内部类一样的权限和限制。/ h, @: I. a6 {6 V, J: b0 S
   
7 `  G. [) u+ ?; z( w' t    如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用。匿名类尤其适合在Swing应用程序中快速创建事件处理程序。& `, F) ]1 F" q
   
/ j3 `7 {: _; X- Q4 h9 N, o; p    清单D就是一个非常简单的Swing应用程序,它展示了与匿名类有关的几个概念。这个例子创建了两个匿名类。第一个对java.awt.event.WindowAdapter进行扩展,并在应用程序窗口关闭时调用应用程序的onClose方法。
/ Z$ F6 l- o. H: y. L   
7 @2 e2 t4 J+ _* I0 m    即使onClose声明为private,匿名类也能调用它,因为匿名类本质上是应用程序类的一个内部类。第二个匿名类实现了java.awt.ActionListener接口,它在一个按钮被按下后关闭应用程序窗口。注意匿名类可以访问本地变量frame.这是由于匿名类在与frame相同的方法内部声明。然而,frame要被声明为final,否则会生成编译错误。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-28 04:21 , Processed in 0.179743 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表