0

我希望有人验证我的理解是否正确。我有一些这样的代码:

public class A {
int a;
int b;
public A(int a)
{
    this.a=a;
}

现在 A() 是我定义的构造函数,这意味着它不是默认构造函数。所以,如果我有一个扩展这个类的子类。

public class B extends A{
public B()
{ 
   super(15);
}

}

如果我在子类中同时打印 a 和 b 的值,我会看到 a 的值为 15,b 的值为 0。当我在 A 中明确定义了一个构造函数时,这意味着它不是默认构造函数,那么如何A 类中 b 的未初始化字段的值是否为 0 ?

4

4 回答 4

6

int是原始类型,不能是null. 默认值为0

于 2012-08-07T21:03:22.853 回答
0

在这种情况下,未初始化的字段 b 在 java 中为 int 获取默认值 0。

http://docs.oracle.com/javase/specs/

于 2012-08-07T21:07:05.517 回答
0

JLS的相关部分说,如果未指定类字段,则会使用其默认值自动初始化。

于 2012-08-07T21:06:05.323 回答
0

原始类型的默认值由Object类的构造函数设置。当您初始化 的对象时B,它在此处被调用..

in public A(int a),super();首先自动执行,因此b由于0'Objectpublic Object()构造函数在这里被调用。

来源:完整参考 JAVA \m/

于 2012-08-07T21:34:41.540 回答