这个什么时候用,不太理解
可以给段代码说明最好,谢谢!

解决方案 »

  1.   

    比较常见的是在GUI里用得到。像添加监听器。
      

  2.   

    简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的: 
    ·只用到类的一个实例。 
    ·类在定义后马上用到。 
    ·类非常小(SUN推荐是在4行代码以下) 
    ·给类命名并不会导致你的代码更容易被理解。 
    在使用匿名内部类时,要记住以下几个原则: 
    ·匿名内部类不能有构造方法。 
    ·匿名内部类不能定义任何静态成员、方法和类。 
    ·匿名内部类不能是public,protected,private,static。 
    ·只能创建匿名内部类的一个实例。 
    ·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 
    ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 下面的例子看起来有点奇怪: 
    //在方法中返回一个匿名内部类 
    public class Parcel6 { 
    public Contents cont() { 
    return new Contents() { 
    private int i = 11. public int value() { 
    return i. 

    }. // 在这里需要一个分号 
    } public static void main(String[] args) { 
    Parcel6 p = new Parcel6(). 
    Contents c = p.cont(). 


    cont()方法将下面两个动作合并在一起:返回值的生成,与表示这个返回值的类的定义!进一步说,这个类是匿名的,它没有名字。更糟的是,看起来是你正要创建一个Contents对象: 
    return new Contents() 
    但是,在到达语句结束的分号之前,你却说:“等一等,我想在这里插入一个类的定义”: 
    return new Contents() { 
    private int i = 11. 
    public int value() { return i. } 
    }. 
    这种奇怪的语法指的是:“创建一个继承自Contents的匿名类的对象。”通过new 表达式返回的引用被自动向上转型为对Contents的引用。匿名内部类的语法是下面例子的简略形式: 
    class MyContents implements Contents { 
    private int i = 11. 
    public int value() { return i. } 

    return new MyContents(). 
    在这个匿名内部类中,使用了缺省的构造器来生成Contents。下面的代码展示的是,如果你的基类需要一个有参数的构造器,应该怎么办: 
    public class Parcel7 { 
    public Wrapping wrap(int x) { 
    // Base constructor call: 
    return new Wrapping(x) { // Pass constructor argument. 
    public int value() { 
    return super.value() * 47. 

    }. // Semicolon required 

    public static void main(String[] args) { 
    Parcel7 p = new Parcel7(). 
    Wrapping w = p.wrap(10). 

    }
      

  3.   

    匿名内部类通常用在JAVA的时间处理上,格式为:classTheOuter{
          ......
          method(
                 newInner(){
                     ......
                 }
          );
          ......
    }这种类基本上只使用他的一个实例,没有必要特意拿出来单独写个!!
      

  4.   


    JAVA的事件处理,不是JAVA的时间处理
      

  5.   

    顾名思义,就是没有名字的内部类,这是Java为了方便我们编写程序而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适,而且也免去了给它取名字的烦恼,:)。
      匿名类的语法是什么样的呢?如下所示:
      new SuperType(){
       内部类的方法和域;
      }
      注意,这里的SuperType指超类,它可以是一个接口(interface)或者是一个类(Class),当它是一个接口的时候就不能有构造参数(Construction parameters)了。匿名类的语法相对于Java的其他部分来说稍微复杂一点,我们可以按如下方式理解:
      1.SuperType为接口
      例子:Interface1() test=new Interface1(){
       要实现的的方法;
       Interface1的域;
       内部类的域以及方法;
      }
      我们可以如下理解:
      先声明了如下一个类,
       class Anonymous1 implements Interface1{
       要实现的的方法;
       Interface1的域;
       内部类的域以及方法;
      }
      然后,Interface1() test=new Anonymouse1();
      这样就比较容易理解了。
      2.SuperType为类
      例子:Class2 test=new Class2(Construction parameters){
       内部类的域以及方法;
      }
      我们可以如下理解:
      先声明了如下一个类,
       class Anonymous2 extends Class2{
       public Anonymous2(Construction parameters){
       super(Construction parameters);
      }
      内部类的域以及方法;
      }
      然后,Class2 test=new Anonymouse2(Construction parameters);
      本节测试代码如下:
      
      
      package cn.edu.hust.cm.test;
      import java.awt.event.ActionListener;
      import java.awt.event.ActionEvent;
      import java.awt.Toolkit;
      import javax.swing.JOptionPane;
      import javax.swing.Timer;
      public class InnerClassTest {
       public InnerClassTest() {
       super();
       }
       public static void main(String[] args) {
       Court court=new Court(10000,true);
       court.start();
       JOptionPane.showMessageDialog(null,"停止么,CMTobby?");
       System.exit(0);
       }
      }
      class Court{
      
       public Court(int interval,boolean beep){
       this.interval=interval;
       this.beep=beep;
       }
      
       public void start(){
       ActionListener action=new ActionListener(){
       public void actionPerformed(ActionEvent e){
       System.out.println("Cindyelf,wouly you be my girl?");
       }
       };
       Timer t=new Timer(interval,action);
       t.start();
      
       }
       private int interval;
       private boolean beep;
      }