1:java程序变量分为局部变量和成员变量
局部变量:形参
方法内的局部变量
代码块内的局部变量
局部变量的作用时间很短暂,它们都被存储在栈内存中。
另外,jvm对类中的类变量(有static修饰的变量)在创建类的时候只分配一块内存空间。并且类变量随着类的初始化而初始化
而实例变量是随着对象的初始化而初始化。
而在初始化一个对象之前,先初始化该对象所属的类,因此,类变量的初始化时机总是在实例变量初始化之前。:
2:实例变量的初始化时机
每次创建java对象时都需要为实例变量分配内存空间,并对实例变量执行初始化
程序一般可在三个地方对实例变量执行初始化
A:定义实例变量时
B:非静态初始化快中
C:通过构造器
AB比C更早执行,AB执行顺序与他们在源代码中的排序顺序相同
经过编译器处理之后,三种对应的赋值语句都被合并到构造器中,在合并的过程中,定义变量语句转换得到赋值语句,初始化块里的语句转换得到赋值语句,总是位于构造器的所有语句之前,合并后,两种赋值语句的顺序保持为他们在源代码中的顺序
3:类变量的初始化时机
jvm对java的一个类只初始化一次,初始化类的时候为类变量分配一次内存空间。
一般在两个地方对类变量执行初始化
A:定义类变量时
B:静态初始化块中对类变量指定初始值
这两种方式的执行顺序与他们在源代码中的排列顺序相同。
时间: 2024-12-20 04:54:23