声明匿名内部类

sap*_*Pro 3 java

rb.addActionListener(new ActionEvent(ae) {
   public void actionPerformed(ActionEvent ae) {
     nowCall(ae);
    }
});
Run Code Online (Sandbox Code Playgroud)

其他方式

Thread th=new Thread(Runnable r) {
  public void run() {
    // do something
  }
};

// notice the ending of above 2 snippets
Run Code Online (Sandbox Code Playgroud)

看到这两个,我真的很困惑.似乎没有确切的模式来声明一个匿名的内部类.

请解释匿名内部类的语法.

Jon*_*eet 8

第二个是无效的,据我所知和测试.

更常见的是创建一个新的Runnable实现:

Thread th=new Thread(new Runnable() {
  @Override
  public void run() {
    // This implements Runnable.run
  }
});
Run Code Online (Sandbox Code Playgroud)

现在你可以覆盖run普通线程的方法:

Thread th=new Thread() {
  @Override
  public void run() {
    // This overrides Thread.run
  }
};
Run Code Online (Sandbox Code Playgroud)

...但我个人更喜欢Runnable在创建线程时单独指定.

现在你在最后注意到的区别仅在于表达式是否用作参数(例如,addActionListener方法或Thread(Runnable)构造函数,或者它是否只是直接赋值给变量.将整体new TypeName() { ... }看作单个表达式,它只是和...之间的不同:

Thread th = expression;
Run Code Online (Sandbox Code Playgroud)

Thread th = new Runnable(expression);
Run Code Online (Sandbox Code Playgroud)