Java静态代码块

23

最近我在看很多程序中,注意到

static {
    //some code here
}

我只是想了解一些关于这个问题的信息。我习惯于代码块都在方法或类中,这个是不是只是将代码块中的所有代码设置为静态修饰符,还是还有其他内容?


我想你可以把它看作是类的构造函数,而不是类的任何实例。虽然我认为你可以有多个静态块,但当然每个类只能有一个构造函数。 - Alexander Mills
3个回答

15

这可能是一个与静态初始化块重复的问题。

无论您创建多少该类型的对象,静态块只会被调用一次。


JVM是否保证静态块在应用程序域中只会被执行一次? - AlexVPerl
4
每次类被加载时,静态块会被调用。如果有多个类加载器加载该类,则代码会执行多次。 - Gijs Overvliet
如果程序启动多次,静态块也会被调用多次。 - Alexander Mills
这个类永远不会被加载,因此方法永远不会被调用,这是可能的吗? - LearningToCode

4

静态块内的代码会在JVM加载类时首先执行(例如,在构造函数之前)。


这段代码是否无法从外部类访问? - Dan
1
这是来自Oracle的官方解释:http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html - Jason Sperske

1

静态块在类级别上只被调用一次,不属于特定实例。

您可以在这里找到更多信息(包括良好的示例),或者在官方Oracle文档中查找。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接