面试准备3:Java中静态(static)成员何时才会初始化

静态成员有哪些?static修饰的成员变量即:类变量

静态成员的初始化的阶段,根据有没有显示初始化而异,根据是否被final修饰而异:

private static int num = 11;
private static int num2;
private static final int num3 = 12

类加载的准备阶段会给所有static 成员在方法区中分配内存,并设置变量初始值【这个初始值就是零值,零值根据类型不同而异】,所以可以理解为num2就是默认初始化为了0,因为它没有显示初始化,之后不会再初始化num2的值了;
这时【即准备阶段】num值也为0,在类加载的初始化阶段num才会执行类变量赋值的操作,即在初始化阶段num值为11;
但在类加载的准备阶段num3的值就会被赋值为12而不是0,这是因为num3被final修饰,此时“类字段的字段属性表中就存在ConstantValue属性,而准备阶段变量num3就会被初始化为ConstantValue属性所指定的值”--来自《深入理解Java虚拟机》第二版

总结

所有静态成员在类加载完成之后都已经或显示或隐式的完成了初始化赋值的操作。

下面是各个类型的零值

零值:
int 0
long 0L
short (short) 0
char '\u0000'
byte (byte) 0
boolean false
float 0.0f
double 0.0d
引用类型 null

关于static的一些使用分析见 谈static

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容