java括号用法

时间:2011-06-28 14:30:53

标签: java

我有一个与此类似的java代码:

AnObject anObject = new AnObject() {
    int count;
    public int creation() {
        return count;
    }
};

我无法理解大括号的含义。构造函数后面的类? 谢谢!

5 个答案:

答案 0 :(得分:15)

这是anonymous inner class

基本上,它是AnObject的子类,没有名称。

它是匿名因为它没有类名声明(例如class Foo),而且它是内部类,因为它是在另一个类中定义的(似乎没有在提供的代码中显示。)

javac通常会将这些类命名为带有$的包含类和一些数字标识符,例如Foobar$1 - 您可能会在找到<EnclosingClass>$1.class之后找到<EnclosingClass>编译该代码。

(其中{{1}}是包含匿名内部类的类。)

答案 1 :(得分:4)

这是一个匿名的内部阶级。

代码几乎与:

相同
private class Foo extends AnObject {
   int count;
   public int creation() { return count; }
}
...
AnObject anObject = new Foo();

但是有一些微妙的差异:

  1. 扩展类和实现接口的语法相同。
  2. 封闭方法的局部变量是可见的,但只有那些声明为final
  3. 的变量

答案 2 :(得分:2)

它正在创建一个匿名的内部类。

关于anonoymous内部类,在以下网站上有一些非常有用的教程。 Anonymous Inner class tutorials

答案 3 :(得分:1)

这是班级的定义。它被称为Anonymous Class

答案 4 :(得分:1)

在这种情况下,花括号用于创建AnObject的匿名子类。大括号内部是新的字段和方法,作为覆盖超类的方法。对于更简单的抽象类或接口,此模式非常常见,例如“就地”创建侦听器。