Java内存机制中,静态的类和方法都会预先加载的,主方法和静态代码块会先在方法区中被创建,然后再把主方法加载进栈。
执行顺序:
静态代码块优先于普通代码块和构造器,
类变量和静态代码块都是类的初始化代码。优先执行先声明的。
普通代码块在对象创建的时候执行,静态代码块在类加载的时候执行。
静态代码块>普通代码块>构造器
普通代码块每创建一次执行一次;静态代码块只执行一次
示例:
package cn.test.study;
public class ExecutionOrder {
public static void main(String[] args) {
System.out.println("1"); //属于静态的主方法,预先加载
new D();
}
}
class C {
static{
System.out.println("2"); //静态代码块,预先加载
}
C(){
System.out.println("3");
System.out.println("4");}
}
class D extends C{
public String sd1=getSd1();
static public String getSd(){
System.out.println("5");
return "sd";
}
static{
System.out.println("6");//静态代码块
}
public static String sd=getSd();
D(){
System.out.println("7");
System.out.println("8");}
public String getSd1(){
System.out.println("9");
return "sd1";
}
}
执行结果:
*
1
2
6
5
3
4
9
7
8*