你的位置:首页 > 软件开发 > Java > 探究java初始化的过程

探究java初始化的过程

发布时间:2012-03-12 16:01:05
最近又在翻《thinking in java》,这本书,怎么说呢,以前学java的时候,老师就没有把它作为教材,但是我偏偏只买了这本书,一直收获很大。好了,言归正传,结合自己的偶然遇到的一个在构造函数中调多态方法引起的思考,讲述一下java的初始化到底是怎样的一个过程。 所谓初始化,当然也就指的是变量。变量可以是内置的变量或者我们创建的类的对象。 有人说,本来初始化本来就是 ...

探究java初始化的过程

   最近又在翻《thinking in java》,这本书,怎么说呢,以前学java的时候,老师就没有把它作为教材,但是我偏偏只买了这本书,一直收获很大。好了,言归正传,结合自己的偶然遇到的一个在构造函数中调多态方法引起的思考,讲述一下java的初始化到底是怎样的一个过程。

   所谓初始化,当然也就指的是变量。变量可以是内置的变量或者我们创建的类的对象。

   有人说,本来初始化本来就是一件很简单的事情,的确,但是java作为一门面向对象语言,由于具有继承、多态,静态、动态绑定等多种特性,所以其初始化的情景可谓是五花八门。现在就一步一步的分析其初始化过程。下面就是几个小原则。优先级依次递减。

   1 静态块优先                                                                                                                                                                              

  程序首先会执行静态块的内容,这也就有了不写main方法就跑hello world的小故事,相信说到这里,大家就有了思路。我们都知道静态类型是和类绑定的而不是和具体实例对象绑定。也就是说,引用一个静态变量的方式往往是MyClass.xxx.这个特点决定了其在编译的阶段就已经分配好了固定的空间。  

  2 父类优先                                                                                                                                                                                  

   由于继承的特性,当导出类(子类)的对象被创建的时候,程序将向上追溯到最初的父类,执行其初始化的操作。然后一次向下调用子类的构造函数。按照这个思路,那么每一个实例第一个要初始化的必定是Object类了。

 3 成员变量优先                                                                                                                                                                             

    一定要注意,成员变量按照其声明的顺序会被初始化,并且立刻被初始化为二进制的0,这个动作发生在所有事件之前,也就是编译器会立刻将分配给对象的空间初始化。一会的小例子将证明这一点。

 最后就是调用类的构造方法了。

本作品由创作,采用知识共享署名-非商业性使用 3.0 Unported许可协议进行许可。
基于上的作品创作,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
作者是HIT童鞋一枚。 分享到:

原标题:探究java初始化的过程

关键词:java,初始化,构造函数

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。