Tinking in java读书笔记---类数据成员的初始化

java会尽力保证所有的变量在使用之前都会得到恰当的初始化。

如果是局部变量未初始化即使用,java会以出错的形式提示。

最好对于变量定义时就给定初始化值,避免一些隐藏错误。


主要讨论java数据成员的初始化顺序。

java的数据成员有三种初始化方式:

1.默认初始化。

2.指定初始化。(这种方式在c++中行不通,因为c++将类看做是图纸,不能保存数据)

3.构造器当中进行初始化。

还有一种特殊情况:静态数据成员的初始化。

静态数据成员比较特殊,初始化顺序是先静态对象,后非静态对象。

但是有一个前提,就是静态对象只有在必要时刻才进行初始化。

如果没有涉及到静态成员的一些操作,就是声明了静态成员,那么这些

静态成员也有可能永远不会初始化。


特别需要注意的是:

默认初始化无法阻止,就是说类的数据成员一定有默认初始化的过程。

这使得类的初始化一定可以得到保障。

一般顺序:默认初始化---》指定初始化---》构造器初始化。

考虑这段代码:

public class OrderOfInitialization {
    public static void main(String[] args) {
        House h = new House();
        h.f();
    }
}

class Window {
    Windoe(int maker){
        System.our.println("Window(" + maker + ")");
    }
}

class House {
    Window w1 = new Window(1);   //before constructor
    
    House() {
        System.out.println("House()");
        w3 = new Window(33);
    }
    
    Window w2 = new Window(2);  //after constructor
    
    void f() {
        System.out.println("f()");
    }
    
    Window w3 = new Window(3);  //end
}
/*Output:
    Window(1)   //指定初始化也优先于构造器中的初始化顺序
    Window(2)
    Window(3)
    House()
    Window(33)
*/







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值