EventQueue.invokeLator(new Runnable()
  {
    public void run()
    {
      ......
    }
  });  参数怎么会是这样?Runable是个类吗?怎么还后面带个括号?可以在参数中声明类吗?
实在搞不明白,请高手详细讲解。
谢谢!

解决方案 »

  1.   

    Runnable是个接口,这里是匿名内部类的用法。
      

  2.   

    你可以理解为
    先定义一个类实现该接口
    class Test implements Runnable{
       public void run(){
          ......
       }
    }调用的时候
    EventQueue.invokeLator(new Test());
    实际就是这个样子的。
    不过java为了方便,提供了一种简洁的语法而已。
      

  3.   

    你看看awt,swing就不会觉的奇怪了。
      

  4.   

    顶.接口不能new,所以new的是接口的实现.内部匿名类就是这样用的 
      

  5.   

    参数怎么会是这样?....别急,等你看发完后面的解释你就明白了。
    Runable是个类吗?它是个接口。里面有个抽像的run()方法。
    怎么还后面带个括号?这里相当于声明了一个省去了类名与class关键字的写,public void run() {....};这里是实现Runnable里面的run()方法。
    可以在参数中声明类吗? 可以的。相当于你的参数是一个实现了Runnable接口的类的一个对像。LZ有空的时候看看内部类相关的东西吧。
    这些东西用好了对代码的优化很有帮助。
      

  6.   

    匿名内部类, 这样的写法在Swing编程中常用到.
      

  7.   

    简洁的写法罢了,不过看起来确实不是特别舒服。
    和单独定义、new出来没什么差别
      

  8.   

    你可以理解为 
    先定义一个类实现该接口 
    class Test implements Runnable{ 
      public void run(){ 
          ...... 
      } 
    } 调用的时候 
    EventQueue.invokeLator(new Test()); 
    实际就是这个样子的。 
    不过java为了方便,提供了一种简洁的语法而已。