2015-11-22 49 views
1

我想知道谁/什么触发了原始类型的初始化在Java中,例如:谁触发原始类型的初始化?

public class A { 
    int primitive; 
    String nonPrimitive; 

    public static void main(String[] args) { 
     A newObject = new A(); 
    } 
} 

所以,当我们创建的A的新实例,A类的默认构造函数被调用。 String extends Object,因此调用Object的构造函数并创建了nonPrimitive var,并具有null值。

原始变量的情况是什么?如果它由默认值为0的虚拟机直接初始化,并且创建新的newObject触发它?或者它是在创建newObject之前创建的?

回答

5

创建对象时,会创建其字段。

new A(); 

的字段都被初始化,各有其默认值 - 根据什么在JLS 4.12.5. Initial Values of Variables的陈述的:

对于所有引用类型(§4.3),默认值是

这就是为什么字符串初始化为null。查看完整的表格以查看其他值(是的,默认情况下,整型变量被设置为0)。

另请参阅12.4.1. When Initialization Occurs,它详细解释了在初始化类时会发生什么。