面试中经常遇到jvm加载的问题,自己写了个demo记录下
jvm在加载类的时候会先由上而下的加载static中的内容,有父类的会先加载父类中的内容。
static中的内容只加载一次
代码块{}中的内容会在new对象的时候执行,并且会在构造方法前执行,每次new都会执行,同样的有父类的先执行父类的。
以上结论由下面的代码运行结果得知,如有错误欢迎讨论。
public class JVMLoaderBean extends SuperBean{
public JVMLoaderBean(){
System.out.println("constructor");
}
{
System.out.println("Block 1");
}
static{
System.out.println("static 1");
}
public static JVMLoaderBean bean=new JVMLoaderBean();
static{
System.out.println("static 2");
}
{
System.out.println("Block 2");
}
public static void main(String[] args){
System.out.println("main 1");
JVMLoaderBean bean2=new JVMLoaderBean();
}
}
public class SuperBean {
{
System.out.println("Super block");
}
static{
System.out.println("Super static");
}
public SuperBean(){
System.out.println("Super constructor");
}
public void method(){}
}
运行结果
Super static
static 1
Super block
Super constructor
Block 1
Block 2
constructor
static 2
main 1
Super block
Super constructor
Block 1
Block 2
constructor