JAVA-基础语法-JVM基础-初始化

举报
Photon 发表于 2020/12/28 14:13:17 2020/12/28
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。