Java:奇怪的静态方法头定义(表达式而不是返回类型)

时间:2012-10-16 07:57:47

标签: java

  

可能重复:
  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

从测验问题的答案来看,代码不仅可以编译,还可以运行。任何人都可以指导我解释这个问题吗?

1 个答案:

答案 0 :(得分:6)

A是一个静态初始值设定项,在类加载器初始化类时调用它:

 static { System.out.print("a"); }

另一个(B)是一个匿名块,每次实例化时都会调用它:

{ System.out.print("b"); }

哦,第三个打印语句C只是一个普通的构造函数调用。

如果你实例化了一个Geryon,你会得到所有三行,就像你发布的代码一样。但是下次你实例化一个Geryon时你只会得到两个--B和C;因为它已经被类加载器初始化,所以不会调用静态块。