2013-03-01 255 views
8

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

+1

你尝试一下,看看会发生什么? – 2013-03-01 19:22:30

+0

是的,我尝试了其他物体,这似乎是发生,这就是为什么我问这个问题 – 2013-03-01 19:24:35

回答

2

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

当您使用new关键字。这意味着你有初始化你的对象。如果它在方法级别或实例级别声明,则无关紧要。

public void method(){ 
Object obj1;// not initialized 
Object obj2 = new Object();//initialized 
} 
+1

谢谢你的澄清。这是我正在寻找的。 – 2013-03-01 19:29:40

+0

@BM欢迎:) – PermGenError 2013-03-01 19:31:16

5

经过进一步调查,原始类型只有在它们是成员变量时才会初始化为默认值,如果未初始化,局部变量将引发编译错误。

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

+0

我不确定这一点。当我在一个方法中声明一个原语时,默认情况下它不会被初始化。如果我尝试在没有初始化的情况下使用它,我会收到一个编译错误。 – 2013-03-01 19:25:53

+0

是的,编译器会吐出“这个变量可能没有被初始化”消息的未初始化本地原语 – 2013-03-01 19:28:57

+0

@JeffHawthorne真的吗?我在前面没有一个java编译器来测试这个,但我认为原型总是会在声明时被赋予默认值,而不管在哪里。 – 2013-03-01 19:30:06

27

Java Language Specification

每个类变量,实例变量,或阵列部件被初始化时创建它的默认值(§15.9,§15.10):

  • 对于字节类型,默认值为零,也就是 (字节)0的值。

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

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

  • 对于类型长,默认值是零,即,0L。

  • 对于浮点类型,默认值为正零,即0.0f。

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

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

  • 对于布尔类型,默认值为false。

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

+0

+ +1为真正列出所有原始类型,我太懒了=)。 – 2013-03-01 19:25:38

+0

谢谢,我知道初始化值初始化时是什么。我只是不确定在什么情况下对象被默认初始化。 – 2013-03-01 19:27:50

+0

这应该是被接受的答案。 – 2017-10-09 23:30:05