|
发表于 2015-1-7 22:44:09
|
显示全部楼层
本帖最后由 n01boy 于 2015-1-7 22:45 编辑
java中,成员变量的位置不严格,但是一个类的加载是有顺序的。
拿你这个为例,没有静态成员变量,没有静态代码块,没有静态方法
当java 程序开始运行的时候,jvm首先找的是main方法
开始执行,main第一句 new 一个House,这个时候程序就跳到了House类中
首先执行House的构造函数(方法),但是,不会进入构造方法的代码块,
因为构造代码块的作用是对类中成员变量进行一个初始化操作,House类一加载就进入构造函数,
成员变量都还没有创建呢,进去没有意义,所以jvm(java虚拟机),要先去把成员变量w1,w2,w3创建出来,创建过程又分2种,创建的时候,成员变量有没有=等于号,也就是初始化值,有先创建个null的变量名为w1,w2,w3的成员变量,这时候,如果w1,w2,w3的后面有等于号,就把等于好右边的值计算后赋值给等号左边。
第一步:默认初始化成员变量,(w1,w2,w3)默认初始化完成后,这3个变量的值是null。
第二步:实例初始化,将等于号右边的值计算出来赋值给等于号左边(这里就去new window类了,window类中的加载顺序和这里是一样的)
第三步,成员变量 实例初始化 完成后,运行构造函数的条件满足了,构造函数中有可能用到的变量已经在内存中准备好了,就可以执行构造函数了。打印House,然后再new一个window 赋值给w3.就又走了一遍window类
希望对你有帮助。{:1_1:}
|
|