java对象的初始化顺序

来源:互联网 发布:java链表的创建 编辑:程序博客网 时间:2024/06/05 17:07

java类初始化顺序是

  1. 初始化类变量(即static修饰的成员变量),并未赋值。不管写的位置在哪里,只要是类变量,系统总会先找到它进行变量初始化。
    执行静态代码块和类变量定义式,两者根据写的位置来决定先后,先写先执行。其实从某种角度上看,可以把类变量定义赋值视为两部分:一部分是定义变量,一部分赋值。而这个赋值部分可以看做是一个静态代码块。两个静态代码块的执行顺序自然是看写的位置的先后了。
  2. 初始化实例变量(即未被static修饰的成员变量),并未赋值。同样的,不管写的位置在哪里,在创建对象时执行到这步时,系统总会找到它进行变量初始化。
  3. 执行构造代码块和实例变量定义赋值式,两者同样根据写的位置先后来决定执行顺序先后,同样可以按2中所写来理解。但是,这里要注意的就是构造代码块是可以调用静态变量的,实例变量定义赋值式可以看做是只对实例变量进行赋值的构造代码块。
  4. 执行构造函数。构造函数同样可以调用静态变量和实例变量。
    初始化结束。

这里说明一点:这是初始化顺序,不等同于语句程序的执行过程(因此在上面的初始化顺序里没有成员函数(静态或者非静态都没有),这是因为成员函数都是调用了才执行,虽然静态函数已经被加载进了方法区,但初始化过程中并没有执行过。
关于这个初始化顺序,其实一句话可以概括: 先初始化类变量然后赋值,再初始化实例变量然后赋值。

参考文章:http://blog.csdn.net/crazyf2015/article/details/46664411

原创粉丝点击