静态代码块:静态代码块是只有在类加载的时候才会加载一次,其他均不会加载。(也即是在使用main方法时才会加载)
非静态代码块:只要创建新的对象就会加载一次,new一个对象加载一次,new一个对象再加载一次。
问题:静态代码块和非静态代码块谁先执行?
答:静态代码块先执行,一位静态代码块是在类加载的时候就已经执行了。
下面判断一下输出结果的输出顺序:
public class Test {
static {
new Test();
System.out.println("静态代码块");
new Test();
}
{
System.out.println("非静态代码块");
}
public static void main(String[] args) {
new Test();
Test test= new Test();
}
}
/*
*结果:
*非静态代码块,运行程序,加载类,所以先运行静态代码块,就会new Test,创建对象,所以输出非静态代码块
*静态代码块,然后继续运行就会输出静态代码块
*非静态代码块,接着继续new一个对象,此时输出非静态代码块。此时静态代码块执行完毕。
*非静态代码块,然后执行非静态代码块,创建两个对象,所以输出两个“非静态代码块”
*非静态代码块
*/