Java:奇怪的静态方法头定义(表达式而不是返回类型)
可能重复:Java:奇怪的静态方法头定义(表达式而不是返回类型),java,Java,可能重复: 我正在为不久的将来的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) {
我正在为不久的将来的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()
methodheader中的两条print语句,在这里我希望返回类型。据我所知,一个静态方法头包括:
access-modifier keyword-"static" return-type|void method-name
从问答题的答案判断,代码不仅可以编译,还可以运行。有人能告诉我解释这一点的来源吗?a是一个静态初始值设定项,当类由classloader初始化时会调用它,它:
static { System.out.print("a"); }
另一个(B)是一个匿名块,每次实例化该类时都会调用它:
{ System.out.print("b"); }
第三个print语句,C,只是一个普通的构造函数调用
如果实例化一个Geryon,您将得到所有三行,就像您发布的代码一样。但是下次你实例化一个Geryon时,你只会得到两个-B和C;因为它已经被classloader初始化,所以静态块不会被调用。@AVD:Question没有非静态块
{…}
谢谢,这正是答案。我目前正在浏览Java语言规范,它必须在那里的某个地方。@0xCAFEBABE-尝试搜索目录或索引。。。或PDF版本。