界面 -> 匿名 class

Interface -> anonymous class

为什么下面的代码不打印???

public class TestInterface {
    interface I {};
    I tester = new I() {{System.out.println("???");}};
    static public void main(String[]args){
        System.out.println("OGOGO");
    }
}

输出:

OGOGO

它不打印,因为 new I() {{System.out.println("???");}}; 从未执行过。请注意,您有一个 成员变量 ,一个字段,没有 static。字段与 class 的相应实例一起初始化,此处为 TestInterface。如果你想让它打印一些东西,创建一个 TestInterface 的实例,它的字段将用你指定的内容初始化。或者简单地用 static 标记它,这样它就变成了一个 class 变量 并在 class 本身初始化时被初始化。

akuzminykh 是对的!

当我换成

static I tester

它打印。