您的位置:首页 > 编程语言 > Java开发

Java的初始化顺序

2016-08-31 00:00 309 查看
当一个类被加载,class.forname或者使用静态方法时,总是先初始化父类的static部分,再初始化子类的static部分,非静态成员一律不初始化。任何一个类的静态部分只被初始化一次

public class Test{
public static void main(String[] args) {
System.out.println("MAIN");
Test0.Fun1();
}
}

class Test0 extends Test1{
static{
System.out.println("Static area in TEST0");
};
Test3 t3;
public static void Fun1(){
}
}
class Test1{
static{
System.out.println("Static area in father class");
};
Test1(){
System.out.println("constructor in father class");
}
}


上述代码输出

MAIN

Static area in father class

Static area in TEST0

当一个类被实例化时,如果类还没有被加载,则先加载,再实例化。实例化中先运行父类的构造函数,再运行子类的构造函数。如果类中的成员没有被初始化,其值为null,其相当于还没有被加载。

public class Test{
public static void main(String[] args) {
System.out.println("MAIN");
Test0 t0 = new Test0();
System.out.println(t0.t3);
}
}

class Test0 extends Test1{

static{
System.out.println("Static area in TEST0");
};

Test3 t3;

public static void Fun1(){

}
Test0(){
System.out.println("constructor in TEST0");
}

}
class Test1{
static{
System.out.println("Static area in father class");
};
Test1(){
System.out.println("constructor in father class");
}
}

class Test3{
static{
System.out.println("Static area in member class");
};
Test3(){
System.out.println("constructor in menber class");
}
}


上面程序输出为

MAIN

Static area in father class

Static area in TEST0

constructor in father class

constructor in TEST0

null

java最开始处理main函数时,相当于如上静态加载main类。Java会线执行Main类父类的静态块,然后是Main类的静态块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: