java成员初始化顺序_Java成员初始化顺序
1. 初始化順序
在類的內(nèi)部,變量定義的先后順序決定了初始化的順序。即使變量散布于方法定義之間,他們?nèi)詴谌魏畏椒?包括構(gòu)造器)被調(diào)用之前初始化。
2. 靜態(tài)成員初始化順序
1??初始化類的靜態(tài)成員或者靜態(tài)塊,靜態(tài)初始化只在Class對象首次加載的時(shí)候進(jìn)行一次。
2??執(zhí)行構(gòu)造器
3??初始化非靜態(tài)成員
例如:
public classAnimal {publicAnimal(String name) {
System.out.println("Animal [" + name + "]");
}public voidm1() {
System.out.println("Animal.m1 is invoked.....");
}
}
public classCar {publicCar(String name) {
System.out.println("Car [" + name + "]");
}public voidm1() {
System.out.println("Car.m1 is invoked.....");
}
}
public classTable {static Animal a1 = new Animal("a1");
Table() {
a1.m1();
}public voidm1() {
System.out.println("Table.m1 is invoked.....");
}static Car c1 = new Car("c1");
}
public classStaticInitialization {static Table t1 = newTable();static Table t2 = newTable();public static voidmain(String[] args) {
System.out.println(t1.a1==t2.a1);
}
}
輸出結(jié)果:
Animal [a1]
Car [c1]
Animal.m1 is invoked.....
Animal.m1 is invoked.....true
由輸出結(jié)果,可以看出t1和t2的成員a1是同一個(gè)對象,說明Table類的靜態(tài)成員a1,c1只初始化了一次。
3. 非靜態(tài)實(shí)例初始化
Java中也有被稱為實(shí)例初始化的類似語法,用來初始化每一個(gè)對象的非靜態(tài)變量。同樣,初始化是發(fā)生在構(gòu)造器之前的。
例如:
public classMug {
Mug(intmarker) {
System.out.println("Mug[" + marker + "]");
}
}
public classMugs {
Mug mug1;
Mug mug2;
static Mug mug3;//非靜態(tài)成員初始化
{
mug1= new Mug(1);
mug2= new Mug(2);
}
static {
mug3 = new Mug(3);
}
Mugs() {
System.out.println("Mugs is created...");
}
}
public static voidmain(String[] args) {
Mugs mugs= newMugs();
}
輸出結(jié)果:
Mug[3]
Mug[1]
Mug[2]
Mugs is created..
從輸出結(jié)果可以看出,實(shí)例初始化子句是在靜態(tài)代碼塊之后,構(gòu)造器之前執(zhí)行的。
這種語法對于支持”匿名內(nèi)部類“的初始化是必須的。
總結(jié)
以上是生活随笔為你收集整理的java成员初始化顺序_Java成员初始化顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 借呗无信用额度多久解除
- 下一篇: uc3842改可调电源教程_明纬开关电源