java属性常量没有默认值那属性加载时是怎么分配空间的,java 不是给属性开辟空间时会先给默认值吗?

如题所述

关于分配空间这个你百度一下JVM内存结构;就可以了解详细机制了;


首先你截图的变量是成员变量(定义在类中,方法体之外。变量在创建对象时实例化。成员变量可被类中的方法、构造方法以及特定类的语句块访问)。而且是实例变量不是静态变量,实例变量不分基本类型和引用类型都是在在对象创建的时候分配内存空间,存储在堆中

类变量的初始化分为两个阶段。第一次是在类加载的准备阶段。准备阶段会正式为类变量分配内存并设置类变量的初始值。如果类变量是基本数据类型,初始值为其对应初值,如果为对象类型,初始值为null。如果类变量同时被final关键字修饰,那么准备阶段就会直接将变量赋值。

成员变量属于对象独有,每个对象创建时只会调用一次构造函数。成员变量可在定义时初始化,也可以在所有构造函数中初始化。你的a虽然定义时没初始化,但你在所有构造方法中初始化了。

当类中有静态成员变量,普通成员变量,静态初始化块,非静态初始化块,局部变量和构造函数初始化动作时:①首先执行静态成员变量的初始化,②其次是普通成员变量的初始化,③然后当静态初始化块中的变量被类名访问或创建该类对象时时执行静态初始化块,创建该类对象也会执行非静态初始化块,④最后执行构造函数当中的初始化动作,⑤最后当类中的函数被调用时执行局部变量的初始化动作。

温馨提示:答案为网友推荐,仅供参考
相似回答