成员变量初始化顺序

原创 2012年03月28日 21:13:29

一.类加载时,变量的初始化顺序:
 1.首先,给静态成员变量分配内存空间,进行默认初始化
  (整型为0,浮点型为0.0,布尔型为false,字符型为'\u0000',引用型为null)
  
 2.其次,执行静态成员变量的初始化操作
  --静态成员的初始化,包括两种: 声明时直接初始化和静态代码块
  --执行顺序为:在代码中的出现的顺序(声明的顺序)
  
 注意: 1和2的动作,在类加载时只执行一次!!!!!!!

 

 如果创建了对象,则在堆中给类的实例分配内存空间,
 3.首先,对实例变量,进行默认初始化
  (整型为0,浮点型为0.0,布尔型为false,字符型为'\u0000',引用型为null)
  
 4.其次,执行实例变量的初始化操作
  --实例变量的初始化,使用前2种初始化方式: 声明时直接初始化和代码块
  --执行顺序为:在代码中的出现的顺序(声明的顺序)
 
 5.最后,执行构造函数(实例变量的第3中初始化方式)
 
二.继承时,变量的初始化顺序:
 1.当类第一次使用时,JVM就会加载该类,如果该类存在父类,那么就先加载父类,这是一个递归过程,直到Object为止.
 在类加载中,首先进行静态成员变量按照默认值进行初始化,
 然后按照在类中声明的顺序执行静态代码块和静态变量的显示初始化.
 这个过程从父类到子类,并且只会执行一次!!!
 
 2.当父类与子类的静态代码初始化完成后,如果创建了类的对象,
 在初始化子类前,会先对其父类的实例变量进行默认初始化,
 然后按照在类中的声明顺序来执行代码块与实例变量的显示初始化,
 最后调用父类的构造函数,这也是一个递归过程,直到Object类为止.
 (这个过程在每次创建对象时,都会执行!!!)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++成员变量的初始化顺序问题

问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1...

Java中构造代码块和成员变量初始化的顺序关系

作者:小开 链接:https://www.zhihu.com/question/20616186/answer/15646132 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 类...

C++类中成员变量的初始化总结

1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。   class CA { public: int d...

深度思考Java成员变量的初始化

写Java代码的时候很少去关注成员变量的声明和初始化顺序。语言的设计者们又为什么会这样设计?比如说很常见的一种abstract(抽象)类不能采用final进行修饰。这个问题比较好理解。因为一个类一旦被...

Qt5基本教程

原地址:http://www.devbean.NET/2012/08/qt-study-road-2-catelog/ 本教程以qt5为主,部分地方会涉及qt4。据说非常适合qt5入...

关于类成员变量初始化顺序

java和C#语言里类变量初始化的顺序是 1   类成员变量初始化先于类的构造函数 2   静态成员变量先于实例变量 3   父类成员变量先于子类成员变量 C#相反 4  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)