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)
*/