Java匿名内部类的域的问题,想问下各位大神,为什么这一段输出要加大括号呢?

 public class Base {
    public static A getA(int i){
        return new A(i){
            {System.out.println("cc");}//这里为什么要加大括号呢?
            public void f(){
                System.out.println("sd");
            }
        };
    }
    public static void main(String[] args) {
        A a=getA(47);
        a.f();
    }

}
abstract class A{
    public A(int i){
        System.out.println(i);
    }
    public abstract void f();
}

就好像你的一个类中为什么不能直接System.out.println("cc");而必须要用代码块展示,道理是一个样的,匿名内部类也是一个类

它是一段具体的代码,不是变量声明,需要放到大括号里,编译器才能识别

匿名内部类要实现里面的方法(含抽象方法),该方法是属于该内部类的,
如果不加大括号,不就是方法里面套方法么,这个方法属于谁? 语法不成立啊。

public A(int i){
System.out.println(i);
}
这是A类的构造方法 所以{System.out.println("cc");}相当于是一个方法 所以要用大括号

因为是匿名的啊。。。你也知道是匿名的,所谓匿名就是不是真正存在这个类,只是在用这个类的时候现生成。