Java类加载顺序

时间:2021-11-29 17:34:14

测试代码:

class HelloA{
   public HelloA(){
     System.out.println("HelloA 构造函数");
   }

   static { System.out.println("HelloA static语句块执行"); }

}

 

class HelloB extends HelloA{
    public final static int Y=200;  
    public HelloB(){

      System.out.println("HelloB 构造函数");
   }
   public static void display(){
      System.out.println("HelloB 静态方法被执行");
   }
   static { System.out.println("HelloB static语句块执行"); }
}

 

 

public class Test {
    public static void main(String[] args) {

       int y=HelloB.Y;

      new HelloB();

      new HelloB();

}

运行结果:

 

HelloA static语句块执行
HelloB static语句块执行
HelloA 构造函数
HelloB 构造函数
HelloA 构造函数
HelloB 构造函数

 

总结:(静态变量、静态初始化块)–>(变量、初始化块)–> 构造器;如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法 

 

        1.static块 :每次类加载的时候,只执行一次

        2.  堆内存用来存放由new创建的对象和数组,栈中主要存放一些基本类型的变量(int, short, long, byte, float, double, boolean, char)和对象句柄,函数