下面代码:
public class Son{
Father father = new Father();
static{
System.out.println("Son static");
}
public Son(){
System.out.println("Son()");
}
}
public class Father {
static{
System.out.println("Father static");
}
public Father(){
System.out.println("Father()");
}
}
public class Main{
public static void main(String[] args){
Son son = new Son();
}
}
结果:
Son static
Father static
Father()
Son()
结论
先执行static代码块,再初始化成员变量,再执行构造方法。
下面代码:
public class Son extends Father{
//Father father = new Father();
static{
System.out.println("Son static");
}
public Son(){
System.out.println("Son()");
}
}
public class Father {
static{
System.out.println("Father static");
}
public Father(){
System.out.println("Father()");
}
}
public class Main{
public static void main(String[] args){
Son son = new Son();
}
}
结果:
Father static
Son static
Father()
Son()
结论
先执行父类的static代码块,再执行子类static,再执行构造方法。
下面代码:
public class Son extends Father{
Father father = new Father(1);
static{
System.out.println("Son static");
}
public Son(){
System.out.println("Son()");
}
}
public class Father {
static{
System.out.println("Father static");
}
public Father(){
System.out.println("Father()");
}
public Father(int a){
System.out.println("Father(1)");
}
}
public class Main{
public static void main(String[] args){
Son son = new Son();
}
}
结果:
Father static
Son static
Father()
Father(1)
Son()
结论
先执行父类的static代码块,再执行子类static,再执行父类构造方法,再再初始化成员变量,再走子类构造方法剩下的。
本文通过几个示例详细解析了Java中父类与子类的静态代码块执行顺序、构造方法调用顺序以及成员变量初始化的过程。对于理解Java类加载机制及初始化流程具有较高的参考价值。
4425

被折叠的 条评论
为什么被折叠?



