界面 -> 匿名 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
- IDE:IntelliJ
- Java: jdk-14.0.2
它不打印,因为 new I() {{System.out.println("???");}};
从未执行过。请注意,您有一个 成员变量 ,一个字段,没有 static
。字段与 class 的相应实例一起初始化,此处为 TestInterface
。如果你想让它打印一些东西,创建一个 TestInterface
的实例,它的字段将用你指定的内容初始化。或者简单地用 static
标记它,这样它就变成了一个 class 变量 并在 class 本身初始化时被初始化。
akuzminykh 是对的!
当我换成
static I tester
它打印。
为什么下面的代码不打印???
?
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
- Java: jdk-14.0.2
它不打印,因为 new I() {{System.out.println("???");}};
从未执行过。请注意,您有一个 成员变量 ,一个字段,没有 static
。字段与 class 的相应实例一起初始化,此处为 TestInterface
。如果你想让它打印一些东西,创建一个 TestInterface
的实例,它的字段将用你指定的内容初始化。或者简单地用 static
标记它,这样它就变成了一个 class 变量 并在 class 本身初始化时被初始化。
akuzminykh 是对的!
当我换成
static I tester
它打印。