码迷,mamicode.com
首页 > 编程语言 > 详细

java 静态变量初始化顺序

时间:2014-07-27 23:00:59      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   color   使用   strong   div   ar   

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静态变量初始化遵循以下规则:

  1. 静态变量会按照声明的顺序依次声明并设置为该类型的默认值,但不赋值为初始化的值。
  2. 声明完毕后,再按声明的顺序依次设置为初始化的值,如果没有初始化的值就跳过

 

java 静态变量初始化顺序,布布扣,bubuko.com

java 静态变量初始化顺序

标签:style   blog   java   color   使用   strong   div   ar   

原文地址:http://www.cnblogs.com/liyingchao/p/3871814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!