繁体   English   中英

是否有默认的构造函数,即使我在课堂上提到了构造函数

[英]is there default constructor even if i mention constructor in class

public class Ex
{ 
  int a;   

  public Ex()   
  {
    System.out.println("a is "+a);   
  } 
}

输出为:a为0

初始化的地方...

我知道int的默认值为零..我的问题是它是通过默认构造函数初始化的。(我听说当我们在类中没有提到任何构造函数时会创建默认构造函数)

不,当您编写特定的on时,没有默认的构造函数。 但是,在调用任何构造函数之前,必须先初始化字段。 字段初始化后,将运行初始化程序({.. some code ..}块),并最终执行构造函数。

a具有初始值的原因写在Java语言规范(4.12.5)中

每个类变量,实例变量或数组组件在创建时均使用默认值初始化

a是实例变量(非静态字段),因此具有初始值。 值本身也被指定:

对于int类型,默认值为零,即0。

知道局部变量(在方法主体中声明的变量)有所不同可能很有趣:

在使用局部变量之前,必须通过初始化或赋值为局部变量显式地赋予一个值,这种方式可以由编译器使用确定赋值规则进行验证。

因此,如果您读取的局部变量尚未在代码中初始化或“设置”,则编译器将给出错误消息。

为了澄清您的想法,如果您没有声明零参数构造函数,并且您的类没有构造函数,则Java为您创建一个默认的零参数构造函数。

对于原始类型,一旦声明,则在使用前使用默认值对其进行初始化(如果未初始化)。

§JLS-8.8.9默认构造函数

如果没有,则在代码中提供了构造函数。

如果一个类不包含构造函数 声明,则将自动提供一个不带参数的默认构造函数:如果所声明的类是原始类Object,则默认构造函数的主体为空。 否则,默认构造函数不使用任何参数,而仅调用不带参数的超类构造函数

在调用构造函数之前初始化基元

当Java为类分配内存时,会发生这种情况。 它将使用默认值过滤所有字段;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM