JAVA-基础语法-JVM基础-初始化
【摘要】 JAVA-基础语法-JVM基础-初始化
给类的静态变量赋予正确的初始值;
在初始化阶段,JVM执行类初始化语句,为类的静态变量赋予初始值。在程序中,静态变量的初始化有两种途径:一是在静态变量的声明处进行初始化;二是在静态代码块中进行初始化。
如下代码,a和b都被显式的初始化,而c没有没显式的初始化,它将报纸默认值0。
public class A {
private static int a = 1;//在变量声明处初始化
public static long b;
public static long c;
static {
b = 1;//在静态代码块中初始化
}
}
在本文中,如果未加特别说明,类的静态变量都是指不能作为 编译时常量的静态变量。Java编译器和虚拟机对 编译时常量有特殊的处理方式,具体可参参考下文中 类的初始化时机。
静态变量的声明语句,以及静态代码块都被看作类初始化语句,JVM会按照初始化语句在类文件中的的书写顺序依次执行它们。
Java虚拟机初始化一个类包含以下步骤:
1.假如这个类还没有被加载和连接,那么先进行加载和连接。
2.假如类中存在直接父类,并且这个父类还没有被初始化,那么就先初始化直接父类。
3.假如类中存在初始化语句,那么就依次执行。
当初始化一个类的直接父类时,也需要重复以上步骤,这会确保当程序主动使用一个类时,这个类以及它的所有父类(包括直接父类和间接父类)都已经被初始化。程序中第一个被初始化的类是Object类
在类或接口被加载的时机上,Java虚拟机规范给实现提供的一定的灵活性,但是又严格定义了初始化的时机,所有的Java虚拟机实现必须在每个类或接口被Java程序“首次主动使用”时才初始化它们。Java程序对类的使用可分为两种:主动使用和被动使用,在下面的类的初始化时机进行详细阐述。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)