Java 接口->;匿名类

Java 接口->;匿名类,java,interface,anonymous-class,Java,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 IDE:IntelliJ

为什么以下代码不打印

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

OGOGO
  • IDE:IntelliJ
  • Jave:jdk-14.0.2

它不打印,因为
newi(){{{System.out.println(“???”);}从不执行。请注意,这里有一个成员变量和一个字段,没有
static
。字段与类的相应实例一起初始化,这里是
TestInterface
。如果希望它打印某些内容,请创建一个
TestInterface
的实例,它的字段将使用您指定的内容初始化。或者简单地用
static
标记它,这样它就成为一个类变量,并在类本身初始化时初始化。

akuzminykh是正确的

当我换到

static I tester

它可以打印。

适合我。你能展示你的实际代码吗?问题是:为什么要打印?有人能解释一下吗?
{System.out.println(“???”);}
实现的是什么方法?为什么调用它?它是一个初始化程序块吗?它被称为一个初始化程序块,这不是一个很好的功能使用,但它是合法的@akuzminykh@markspace是的,谢谢。我刚刚记着,因为你也发了。我知道语法,但从未见过有人为匿名类实现语法^^@像这样的akuzminykh匿名类被一些人使用,它被称为双括号初始化。不过在我看来这不是个好主意。嗯,new创建了一个实例。毫无疑问-创建了匿名类的实例。有些人为他们写了它(打印“?”),我们使用了不同的代码。阿库兹明尼赫是正确的<代码>新建
从未在您的代码中执行。为什么您发布了我的建议,并评论它正在工作?^你只需将我的答案标记为解决方案,它将是相同的信息。那个该死的按钮在哪里?!