刚看的书,想记录一下自己学到的知识
qaq第一次写博客
public class Test02A{
static{
System.out.println("父类 静态代码块执行了");
}
{
System.out.println("父类 非静态代码块执行了");
}
public Test02A(){
System.out.println("父类 构造方法执行了");
}
public static void main(String[] args) {
System.out.println("父类 main方法执行了");
new Test02B();
}
}
public class Test02B extends Test02A{
static{
System.out.println("子类 静态代码块执行了");
}
{
System.out.println("子类 非静态代码块执行了");
}
public Test02B(){
System.out.println("子类 构造方法执行了");
}
public static void main(String[] args){
System.out.println("子类 main方法执行了");
new Test02B();
}
}
记录new一个子类实例这些代码的执行顺序
如果从子类开始执行,运行结果如下:
*父类 静态代码块执行了
子类 静态代码块执行了
子类 main方法执行了
父类 非静态代码块执行了
父类 构造方法执行了
子类 非静态代码块执行了
子类 构造方法执行了*
如果从父类开始执行,运行结果如下:
*父类 静态代码块执行了
父类 main方法执行了
子类 静态代码块执行了
父类 非静态代码块执行了
父类 构造方法执行了
子类 非静态代码块执行了
子类 构造方法执行了*
说明了java
程序初始化的顺序是这样的,首先,静态代码块运行在加载类的最前面,其次是非静态代码块,最后是构造方法,当某类被使用时就会被加载
。
还有一个值得注意的,就是静态变量初始化在静态方法的前面