java代码执行加载顺序
1.在JAVA中用{}
括起来的代码称为代码块,根据定义位置和申声明关键字不同,分为4类:
普通代码块,构造块,静态块,同步代码块
2.加载顺序:
public class Parent {
static PrintMsg pm = new PrintMsg("parent-static-filed");
public PrintMsg pm2 = new PrintMsg("parent-common-filed");
static {
System.out.println("parent-static-block");
}
{
System.out.println("parent-common-block");
}
public Parent(){
System.out.println("parent-no-arg-method");
}
public static void send(){
System.out.println("parent-static-method-send");
}
}
public class Child extends Parent{
static PrintMsg pm = new PrintMsg("child-static-filed");
public PrintMsg pm2 = new PrintMsg("child-common-filed");
static {
System.out.println("child-static-block");
}
{
System.out.println("child-common-block");
}
public Child(){
System.out.println("child-no-arg-method");
}
public static void send(){
System.out.println("child-static-method-send");
}
}
public class MainTest {
public static void main(String[] args) {
Child child = new Child();
child.send();
}
}
执行可知:
1.静态变量 >> 静态代码块 >> 实例变量 >> 实例代码块 >> 实例构造器 >> 实例方法(这个是主动调用的)
2.静态层级:静态变量和方法先执行,若有继承关系,则父类先执行静态逻辑,而后子类再执行静态逻辑。
3.实例层级:当父子静态逻辑一并执行完后,才开始执行实例层级,同静态逻辑一样,先执行父类再执行子类