以下几种类成员声明和初始化之间的确切区别是什么?

选项1:

public class MyClass {
    private int myInt = 1;
}


选项2:

public class MyClass {
    private int myInt;
    {
        myInt = 1;
    }
}

最佳答案

如果是

public class MyClass {
    private int myInt;
    {
        myInt = 1;
    }
}


每次构造对象时,实例初始化块都会在构造函数之前运行。

在第二种情况下,它是相同的:)

结论:没什么区别(但是值得知道当构造一个对象时会发生什么)。

请参见docs - Initializing Instance Members


  Java编译器将初始化程序块复制到每个构造函数中。
  因此,此方法可用于在两个之间共享一个代码块
  多个构造函数。


请注意,您可以使用javap -c反编译类文件并进行验证。

关于java - 两个类成员声明和初始化之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25378829/

10-14 10:37