Java 静态初始值设定项vs实例初始值设定项vs构造函数
我正在准备一个关于Java的考试。在我学习的过程中,我遇到了我不熟悉的java语法。例如花括号({})在没有名称的类主体旁边,有些有静态关键字。我发现他们被称为“初始化者”。谁能帮我指出它们之间的主要区别,以及它们与构造函数的区别。谢谢它们之间的主要区别在于它们的执行顺序。为了说明这一点,我将用一个例子来解释:Java 静态初始值设定项vs实例初始值设定项vs构造函数,java,constructor,static,initializer,Java,Constructor,Static,Initializer,我正在准备一个关于Java的考试。在我学习的过程中,我遇到了我不熟悉的java语法。例如花括号({})在没有名称的类主体旁边,有些有静态关键字。我发现他们被称为“初始化者”。谁能帮我指出它们之间的主要区别,以及它们与构造函数的区别。谢谢它们之间的主要区别在于它们的执行顺序。为了说明这一点,我将用一个例子来解释: public class SomeTest { static int staticVariable; int instanceVariable;
public class SomeTest {
static int staticVariable;
int instanceVariable;
// Static initialization block:
static {
System.out.println("Static initialization.");
staticVariable = 5;
}
// Instance initialization block:
{
System.out.println("Instance initialization.");
instanceVariable = 10;
}
// Constructor
public SomeTest() {
System.out.println("Constructor executed.");
}
public static void main(String[] args) {
new SomeTest();
new SomeTest();
}
}
输出将是:
Static initalization.
Instance initialization.
Constructor executed.
Instance initialization.
Constructor executed.
简言之:
- 静态初始化块在JVM加载类后运行
- 每次实例化对象时,实例初始化块都会在构造函数之前运行
- 构造函数(显然)在每次实例化对象时运行
未命名的花括号是作用域引用名称的匿名代码块。如果在块内创建参照,则无法在块外获取该参照的值。如果你发现自己需要它们,这表明你需要将代码重构成更多的方法。这是你真正需要在教科书中找到答案的事情。不过我可以给你一些建议。我编程Java已经有几年了,所以我给你的任何信息都是一般性的
通常,带有花括号的无名块是匿名函数。静态初始值设定项初始化该类的所有实例的全局数据,并在第一次引用该类时运行。您需要注意如何使用静态属性或方法。有了这些信息,你可以在课本中找到准确的细节 我向你推荐这本书的第三章和第三章4@Reieus他还询问了匿名代码块这是一个很好的答案。但我想补充一点,构造函数比实例初始化器更常见。我认为实例初始值设定项的主要用途是在匿名内部类中进行初始化,而匿名内部类不能有构造函数,因为它们缺少名称