我正在查看下面的代码,发现有些奇怪的东西:
public class Sequence {
Sequence() {
System.out.print("c ");
}
{
System.out.print("y ");
}
public static void main(String[] args) {
new Sequence().go();
}
void go() {
System.out.print("g ");
}
static {
System.out.print("x ");
}
}
我原以为这会给出编译错误System.out
与“y”不属于方法声明只是一个{ }
。为什么这是有效的?我不知道如何或应该如何调用这段代码。
运行时它会产生x y c g
另外,为什么static { }
在序列构造函数之前被调用?
This:
static {
System.out.print("x ");
}
is a 静态初始化块,并在类加载时调用。你可以在你的班级中拥有任意数量的它们,它们将按照它们出现的顺序(从上到下)执行。
This:
{
System.out.print("y ");
}
is an 初始化块,并且代码被复制到类的每个构造函数的开头。因此,如果您的类有很多构造函数,并且它们都需要在开始时执行一些常见的操作,则只需编写一次代码并将其放在一个初始化块像这样。
因此,您的输出非常有意义。
As Stanley下面评论了,看Oracle 教程中描述初始化块的部分了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)