它们之间的区别是什么:
public class A
{
private int x = 1;
A() {}
}和
public class A
{
private int x;
A() { x = 1; }
},如果有的话?
发布于 2011-09-08 14:38:14
如果你从实际的角度来看,不同之处在于,对于第二种形式的初始化,如果你要编写许多重载的构造函数,那么你必须为你编写的每个构造函数重复初始化。
发布于 2011-09-08 14:41:12
在第二种情况下,您会重复初始化x=0的过程,因为它是实例变量,所以默认情况下会被初始化为0。
发布于 2011-09-08 14:48:43
来自JLS 12.5
每当创建新的类实例时,都会为其分配内存空间,为类类型中声明的所有实例变量和类类型的每个超类中声明的所有实例变量提供空间,包括可能隐藏的所有实例变量。
再往下看,它写道:
在将对新创建的对象的引用作为结果返回之前,将使用以下过程处理指定的构造函数以初始化新对象:
本质上,JVM为变量x (以及超类的所有实例变量)创建内存,并使用默认值(x的0)初始化每个实例。在返回类A的新实例之前,它现在将执行构造函数体。
https://stackoverflow.com/questions/7344051
复制相似问题