public class Ex
{
int a;
public Ex()
{
System.out.println("a is "+a);
}
}
输出为:a为0
其中a初始化...
我知道int的默认值是零。我的问题是它在哪里被初始化...通过默认构造函数?(我听说默认构造函数是在我们没有提到类中的任何构造函数时创建的)
答案 0 :(得分:5)
不,当您编写特定的on时,没有默认构造函数。但是在调用任何构造函数之前,字段会被初始化。初始化字段初始化程序({.. some code ..} blocks)后,最后执行构造函数。
答案 1 :(得分:3)
a
具有初始值的原因写在Java language specification (4.12.5):
每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化
a
是一个实例变量(非静态字段),因此它具有初始值。值本身也是指定的:
对于int类型,默认值为零,即0。
可能有趣的是,对于局部变量(在方法体中声明的变量),这是不同的:
必须在使用初始化或赋值之前,通过编译器使用明确赋值规则验证的方式,在使用本地变量之前显式赋予该值。
因此,如果您读取了尚未在代码中初始化或“设置”的局部变量,编译器将给出错误。
答案 2 :(得分:1)
要清除头脑,如果你没有声明零参数构造函数并且你的类没有构造函数,那么java会为你创建一个默认的零参数构造函数。
对于原始类型,一旦声明,在使用前初始化(如果未初始化)默认值。
答案 3 :(得分:0)
§ JLS - 8.8.9 Default Constructor
在你的代码中,如果你还没有提供构造函数。
如果某个类不包含构造函数 声明,然后是默认值 不带参数的构造函数 自动提供:如果 被宣布的阶级是原始的 class Object,然后是默认值 构造函数有一个空体。 否则,默认构造函数 不带参数,只需调用 没有的超类构造函数 参数
答案 4 :(得分:0)
原语
答案 5 :(得分:0)
当Java为类分配内存时会发生这种情况。它使用默认值填充所有字段;