JAVA变量初始化顺序

1.在调用构造初始化之前,会首先对成员变量进行自动初始化。
public class Counter {
    int i;
    Counter() {
        i = 7 ;
    }
}
i的值首先会被置为0,然后才是调用构造器,使得i变成7。
2.成员变量的初始化顺序为定义的先后顺序。
class Bowl {
    Bowl(int marker) {
        System .out. println("Bowl(" + marker + ")");
    }
    void f1(int marker) {
        System .out. println("f1(" + marker + ")");
    }
}

class Table {
    static Bowl bowl1 = new Bowl(1 );
    Table() {
        System .out. println("Table()" );
        bowl2 .f1( 1);
    }
    void f2(int marker) {
        System .out. println("f2(" + marker + ")");
    }
    static Bowl bowl2 = new Bowl(2 );
}

class Cupboard {
    Bowl bowl3 = new Bowl( 3);
    static Bowl bowl4 = new Bowl(4 );
    Cupboard() {
        System .out. println("Cupboard()" );
        bowl4 .f1( 2);
    }
    void f3(int marker) {
        System .out. println("f3(" + marker + ")");
    }
    static Bowl bowl5 = new Bowl(5 );
}

class StaticInitialization {
    public static void main (String[] args) {
        System .out. println("Creating new Cupboard() in main" );
        new Cupboard();
        System .out. println("Creating new Cupboard() in main" );
        new Cupboard();
        table .f2( 1);
        cupboard .f3( 1);
    }
    static Table table = new Table();
    static Cupboard cupboard = new Cupboard();
}
输出结果为:
输出结果:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
结果分析:
在main函数执行之前,完成static的初始化
执行static Table table = new Table ();
在Table中,又首先初始化两个static
得到结果:
Bowl(1)
Bowl(2)
执行Table的构造函数
得到结果:
Table()
f1(1)
然后执行static Cupboard cupboard = new Cupboard();
进入Cupboard,还是首先对static变量初始化
得到结果
Bowl(4)
Bowl(5)
然后对Cupboard的成员变量进行初始化
执行Bowl bowl3 = new Bowl( 3);
得到结果
Bowl(3)
然后执行Cupboard的构造函数
得到结果
Cupboard()
f1(2)
至此,StaticInitialization类中的两个static变量执行完毕。
然后开始执行main函数
首先得到
Creating new Cupboard() in main
再执行new Cupboard();
要注意到,static成员不属于对象,从属于类,只进行一次初始化
这时static不执行,开始对成员变量bowl3初始化
得到结果
Bowl(3)
再执行Cupboard的构造函数
得到结果
Cupboard()
f1(2)
之后执行结果类似。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值