java中的默认初始化

B M*_*B M 9 java initialization

我对Java中的变量初始化感到困惑.据我所知,类变量获取默认初始化,而默认情况下不初始化局部变量.但是,如果我使用new关键字在方法内创建一个数组,它默认会初始化.所有对象都是如此吗?使用new关键字是否初始化对象,无论它是类变量还是局部变量?

iTe*_*ech 31

来自Java语言规范

每个类变量,实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9,§15.10):

  • 对于type字节,默认值为零,即(byte)0的值.

  • 对于short类型,默认值为零,即(short)0的值.

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

  • 对于long类型,默认值为零,即0L.

  • 对于float类型,默认值为正零,即0.0f.

  • 对于double类型,默认值为正零,即0.0d.

  • 对于char类型,默认值为空字符,即'\ u0000'.

  • 对于boolean类型,默认值为false.

  • 对于所有引用类型(第4.3节),默认值为null


Kev*_*lia 5

在进一步调查之后,只有当它们是成员变量时,原语才会始终初始化为默认值,如果未初始化,则局部变量将抛出编译错误.

如果您创建一个基元数组,它们将默认初始化(对于本地和成员数组都是如此),您需要实例化每个对象的数组.


Per*_*ror 4

所有物体都是如此吗?使用 new 关键字是否会初始化对象,无论它是类变量还是局部变量?

当你使用new关键字时。这意味着您已经初始化了您的对象。它是在方法级别还是实例级别声明并不重要。

public void method(){
Object obj1;// not initialized
Object obj2 = new Object();//initialized
}
Run Code Online (Sandbox Code Playgroud)