可能重复:
Static Initialization Blocks
Unusual “static” method declaration
我正准备在不久的将来为OCJPC做准备,我遇到了一个我从未见过的构造。由于谷歌编程结构很难,我在这里问这个问题。代码片段:
class Geryon {
static { System.out.print("a"); }
{ System.out.print("b"); }
Geryon(String s) { System.out.print(s); }
public static void main(String[] args) {
new Geryon("c");
}
}
我指的是我期望返回类型的地方theGeryon()
方法标题内的2个打印语句。至于我能够谷歌,静态方法标题包括:
access-modifier keyword-"static" return-type|void method-name
从测验问题的答案来看,代码不仅可以编译,还可以运行。任何人都可以指导我解释这个问题吗?
答案 0 :(得分:6)
A是一个静态初始值设定项,在类加载器初始化类时调用它:
static { System.out.print("a"); }
另一个(B)是一个匿名块,每次实例化时都会调用它:
{ System.out.print("b"); }
哦,第三个打印语句C只是一个普通的构造函数调用。
如果你实例化了一个Geryon,你会得到所有三行,就像你发布的代码一样。但是下次你实例化一个Geryon时你只会得到两个--B和C;因为它已经被类加载器初始化,所以不会调用静态块。