首页 > 代码库 > java 静态变量初始化顺序
java 静态变量初始化顺序
public class Elvis { public static final Elvis INSTANCE = new Elvis(); private final int beltSize; private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR); private Elvis() { beltSize = CURRENT_YEAR - 1930; } public int beltSize() { return beltSize; } public static void main(String[] args) { System.out.println("Elvis wears a size " + INSTANCE.beltSize() + " belt."); }}
静态成员属于整个类的,在类加载完成后,已经初始化完成。
但要注意初始化顺序,按声明顺序。
如上图所示:INSTANCE初始化在CURRENT_YEAR之前,但INSTANCE初始化使用了还未初始化的CURRENT_YEAR,导致初始化错误。
具体流程:
A、第一行的INSTANCE被main方法触发,创建一个新的实例; B、类构造方法被触发,beltSize被计算,此时CURRENT_YEAR还是未初始化状态,默认值为0,导致beltSize被计算为-1930。
Java静态变量初始化遵循以下规则:
- 静态变量会按照声明的顺序先依次声明并设置为该类型的默认值,但不赋值为初始化的值。
- 声明完毕后,再按声明的顺序依次设置为初始化的值,如果没有初始化的值就跳过。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。