2

可能重复:
静态初始化块
不寻常的“静态”方法声明

我正在尝试在不久的将来为 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

从问答题的答案来看,代码不仅会编译,还会运行。谁能指导我找到解释这一点的来源?

4

1 回答 1

6

A 是一个静态初始化器,当类被类加载器初始化时被调用,这个:

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

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

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

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

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

于 2012-10-16T07:59:49.837 回答