成员变量初始化顺序

原创 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...

C++中各种类型的成员变量的初始化方法(mark-好)

C++类中各种不同类型成员根据是否static 、是否const类型的初始化方法不尽相同,写代码时经常搞乱,网上搜了一下资料,全部总结一下。一、例子 -----------------Test.h-...
  • yockie
  • yockie
  • 2012年08月15日 11:28
  • 9580

Java类的变量初始化顺序

大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台...

Java中有关变量初始化先后顺序的思考和实验(一)

一个Java类中会定义各种成员变量和

C++类中成员变量初始化

C++类中成员变量包括主要四种: 普通成员变量,常量成员变量,静态成员变量,静态常量成员变量 上述成员变量该如何初始化,注意不是赋值。 由于普通成员变量和常量成员变量,每一个类实例化,都一份...

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

写Java代码的时候很少去关注成员变量的声明和初始化顺序。语言的设计者们又为什么会这样设计?比如说很常见的一种abstract(抽象)类不能采用final进行修饰。这个问题比较好理解。因为一个类一旦被...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:成员变量初始化顺序
举报原因:
原因补充:

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